home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 July: Mac OS SDK / Dev.CD Jul 97 SDK1.toast / Development Kits (Disc 1) / PC Card Manager / CIncludes / FileManagerTypes.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-01-13  |  79.0 KB  |  1,902 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        FileManagerTypes.h
  3.  
  4.      Contains:    FileManager Fundamental Declarations & Definitions
  5.  
  6.      Version:    System 8
  7.  
  8.      DRI:        Bill Kain
  9.  
  10.      Copyright:    © 1984-1996 by Apple Computer, Inc.
  11.                  All rights reserved.
  12.  
  13.      Warning:    *** APPLE INTERNAL USE ONLY ***
  14.                  This file may contain unreleased API's
  15.  
  16.      BuildInfo:    Built by:            SuperMario Build Daemon
  17.                  With Interfacer:    2.0d11   (PowerPC native)
  18.                  From:                FileManagerTypes.i
  19.                      Revision:        58
  20.                      Dated:            3/11/96
  21.                      Last change by:    dkh
  22.                      Last comment:    Add kFSVTBoolean simple property type enumeration. Add
  23.  
  24.      Bugs:        Report bugs to Radar component “System Interfaces”, “Latest”
  25.                  List the version information (from above) in the Problem Description.
  26.  
  27. */
  28. #ifndef __FILEMANAGERTYPES__
  29. #define __FILEMANAGERTYPES__
  30.  
  31. #ifndef __TYPES__
  32. #include <Types.h>
  33. #endif
  34. #ifndef __ERRORS__
  35. #include <Errors.h>
  36. #endif
  37. #ifndef __KERNEL__
  38. #include <Kernel.h>
  39. #endif
  40. #ifndef __TEXTOBJECTS__
  41. #include <TextObjects.h>
  42. #endif
  43. #ifndef __MATH64__
  44. #include <Math64.h>
  45. #endif
  46.  
  47. #ifdef __cplusplus
  48. extern "C" {
  49. #endif
  50.  
  51. #if PRAGMA_IMPORT_SUPPORTED
  52. #pragma import on
  53. #endif
  54.  
  55. #if PRAGMA_ALIGN_SUPPORTED
  56. #pragma options align=power
  57. /* the following contents can only be used by compilers that support PowerPC struct alignment */
  58.  
  59. #if FOR_SYSTEM8_PREEMPTIVE
  60. /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>> F o u n d a t i o n  D e f i n i t i o n s <<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
  61. /*
  62. ****************************************************************************
  63.     CONSTANTS & TYPES
  64. ****************************************************************************
  65. */
  66. /*
  67.     FSAgentObjID is used to indicate a specific registered FS Agent.
  68.     This value is not persistent across rebooting the machine or
  69.     re-registering the given agent. It is in fact an object ID to
  70.     which requests for the given agent should be sent.
  71. */
  72. typedef ObjectID FSAgentObjID;
  73. /*
  74.     FSBufferDescriptor
  75.         Tells the File Manager about the location and size of a buffer.
  76.         Buffers are nominally arrays of structures, so FSBufferDescriptor
  77.         lets you indicate the size of an array element, and the number of
  78.         elements.
  79.     
  80.     bufferAddress
  81.         Starting address of the buffer.
  82.     itemSize
  83.         The size (in bytes) of one array element.  This would typically be
  84.         the size of an FSPropertyStatusElement, or the size of the caller's
  85.         property structure (i.e., for all properties of a single object).
  86.     itemCount
  87.         The number of array elements.  When the buffer is for properties,
  88.         this is usually equal to the number of objects.  When the buffer
  89.         is for status, this is usually the number of objects times the
  90.         number of properties per object (i.e., the total number of properties).
  91.  
  92.         If itemCount is not 1, then the array elements are at addresses:
  93.         bufferAddress, bufferAddress+itemSize, bufferAddress+2*itemSize, etc.
  94.     
  95.     Note: the actual length of the buffer is itemSize * itemCount bytes.
  96.     
  97.     Note: Some calls that take a (pointer to a) buffer descriptor allow you
  98.         to pass NULL for that parameter.  In that case, the API will create
  99.         a buffer descriptor for you.  It will set the itemCount to 1, and the
  100.         bufferAddress and itemSize based on the FSBufferElementDescriptor's
  101.         associated with the buffer.  The bufferAddress will be the least offset
  102.         and the itemSize will be the maximum (length + offset).  The actual
  103.         FSBufferElementDescriptors used by the File Manager will have their
  104.         offset fields decremented by bufferAddress.  This provides scatter-
  105.         gather capability.
  106. */
  107. struct FSBufferDescriptor {
  108.     LogicalAddress                     bufferAddress;
  109.     ByteCount                         itemSize;
  110.     ItemCount                         itemCount;
  111. };
  112. typedef struct FSBufferDescriptor FSBufferDescriptor;
  113.  
  114. typedef FSBufferDescriptor *FSBufferDescriptorPtr;
  115. extern const FSBufferDescriptor        kFSNullFSBufferDescriptor;
  116. /*
  117.     FSBufferElementDescriptor
  118.         Used to describe a field within a buffer described by an FSBufferDescriptor.
  119.         (Actually, it describes a field within one of the array elements.)
  120.     
  121.     length
  122.         Size (in bytes) of the field.
  123.     offset
  124.         Offset (in bytes) from the start of an array element to the start of the
  125.         field.  If the supplied pointer to the FSBufferDescriptor was NULL, then
  126.         this is the actual (logical) address of the data.  See FSBufferDescriptor.
  127. */
  128. struct FSBufferElementDescriptor {
  129.     ByteCount                         length;
  130.     ByteOffset                         offset;
  131. };
  132. typedef struct FSBufferElementDescriptor FSBufferElementDescriptor;
  133.  
  134. typedef FSBufferElementDescriptor *FSBufferElementDescriptorPtr;
  135. /*
  136.     //•• it's been suggested that this should be wide...
  137.     //•• This type isn't used in any of the interface files; maybe
  138.     //•• it should be removed?
  139. */
  140. typedef UInt32 FSCount;
  141. /*
  142.     FSDate
  143.         The standard type used to represent a date/time value.  For example, the
  144.         modification and creation date properties of an object would be formatted
  145.         as FSDates.
  146.         
  147.     Note: an FSDate is really just a TimeObject, so you can use all the normal
  148.         TimeObject facilities with them.
  149. */
  150. typedef TimeObject FSDate;
  151. /*
  152.     FSName
  153.         The standard type used for the name property of an object.
  154.     ConstFSName
  155.         An FSName that will not be changed by a called routine.  Used in
  156.         function declarations only.
  157.         
  158.     NOTE: Only persistent text objects are supported.
  159. */
  160. typedef TextObject FSName;
  161. typedef ConstTextObject ConstFSName;
  162. /*
  163.     FSObjectPrivileges
  164.         A set of flags that describe what operations can be performed
  165.         on an open stream or mapped file.
  166.     
  167.     kFSCanReadForkProperty
  168.         For streams, allow read operations (FSStreamSimpleRead and FSStreamRead).
  169.         For mapped files, allow the file to be mapped such that the memory can be
  170.         read (this is required).
  171.     kFSCanWriteForkProperty
  172.         For streams, allow write operations (FSStreamSimpleWrite and FSStreamWrite).
  173.         For mapped files, allow the file to be mapped such that the memory can be
  174.         written.  If not set, then the memory can be mapped read-only.
  175.     kFSCanExtendForkProperty
  176.         For streams, allow the fork to grow (calls to FSStreamSetAbsoluteEOF,
  177.         FSStreamSetEOF, or FSStreamAllocate that would cause the EOF to become
  178.         larger).  For mapped files, allow the memory area to grow, and allow
  179.         changes to addresses beyond the EOF to actually be written to the fork;
  180.         also allows FSMappedFileSetEOF to set the EOF to a larger value.
  181.     kFSCanTruncateForkProperty
  182.         For streams, allow the fork to shrink (calls to FSStreamSetAbsoluteEOF,
  183.         FSStreamSetEOF, or FSStreamReleaseAllocation that would cause the EOF
  184.         to become smaller).  For mapped files, allow FSMappedFileSetEOF to change
  185.         the EOF to a smaller value.
  186.     
  187.     Note: some volume formats may not be able to control each of these operations
  188.         individually.  You would usually set or clear the kFSCanWriteForkProperty,
  189.         kFSCanExtendForkProperty and kFSCanTruncateForkProperty bits together.
  190. */
  191.  
  192. enum {
  193.     kFSInvalidPrivileges        = 0x00000000,
  194.     kFSCanReadForkProperty        = 0x00000200,
  195.     kFSCanWriteForkProperty        = 0x00000400,
  196.     kFSCanExtendForkProperty    = 0x00000800,
  197.     kFSCanTruncateForkProperty    = 0x00001000
  198. };
  199.  
  200. typedef OptionBits FSObjectPrivileges;
  201. /*
  202.     FSObjectPrivilegesDenied
  203.         A set of flags that describes which operations CANNOT be performed on
  204.         an open stream or mapped file.  These are the same flags as FSObjectPrivileges,
  205.         but the name of the data type is changed as a reminder that the operations
  206.         should NOT be allowed for the indicated entity.
  207. */
  208. typedef FSObjectPrivileges FSObjectPrivilegesDenied;
  209. /*
  210.     FSOffset
  211.         A signed 64-bit integer used to describe an offset into a property, or the
  212.         difference between two positions.  It is signed because it is a relative
  213.         value (such as a negative offset from EOF).
  214. */
  215. typedef SInt64 FSOffset;
  216. /*
  217.     FSPropertyStatusElement
  218.         Used for returning status for a single property of an object, when a call
  219.         can manipulate more than one property.  Also used to return the actual
  220.         length of a returned property (since buffer underflow is not an error).
  221.         
  222.         If a call returns the error E_PropertyException, then one or more properties
  223.         had an error, and you should check the property status array.  For example,
  224.         this would be used when getting multiple properties; since some might not
  225.         exist, you'd want an error for just those properties, but still allow the
  226.         call to complete for the other properties.
  227.     
  228.     propertyStatus
  229.         The status of the operation on the associated property.
  230.     propertyValueActualSize
  231.         The actual size (in bytes) of the returned property.  If propertyStatus
  232.         was E_PropertyBufferFieldTooSmall, then this field contains the actual
  233.         size of the property so you can allocate enough space and try again (note:
  234.         no valid data will be returned for the property in this case -- you get
  235.         all or nothing).
  236. */
  237. struct FSPropertyStatusElement {
  238.     OSStatus                         propertyStatus;
  239.     ByteCount                         propertyValueActualSize;
  240. };
  241. typedef struct FSPropertyStatusElement FSPropertyStatusElement;
  242.  
  243. typedef FSPropertyStatusElement *FSPropertyStatusElementPtr;
  244. /*
  245.     kFSSingleInstanceProperty
  246.         A constant used for constructing the tag for a property, when the
  247.         property can only have one instance.
  248. */
  249.  
  250. enum {
  251.     kFSSingleInstanceProperty    = 0
  252. };
  253.  
  254. /*
  255.     FSFileManagerPropertyTagVersion
  256.         A subfield of some property tags, that indicates which version of
  257.         the property should be used.  This is typically used when the format
  258.         of a property changes over time, to allow the older formats to be supported
  259.         in newer versions of the File Manager or volume formats.  For now, you
  260.         should always use kFSCurrentReleasedVersion.
  261. */
  262.  
  263. enum {
  264.     kFSInvalidPropertyTagVersion = 0,
  265.     kFSD10Version                = 1,
  266.     kFSD11NewAttributesVersion    = 2,
  267.     kFSCurrentReleasedVersion    = kFSD11NewAttributesVersion
  268. };
  269.  
  270. typedef UInt16 FSFileManagerPropertyTagVersion;
  271. /*
  272.     FSSize
  273.         The size of a property (or part of a property).
  274.     
  275.     Note: this is a signed 64-bit value.  Since positions within a property
  276.         (eg., in stream access) are specified by an FSOffset, which is also
  277.         a signed 64-bit quantity, the maximum size of a property is restricted
  278.         to 2^63 bytes.  Having FSSize be a signed quantity makes it easier to
  279.         mix with FSOffset.
  280. */
  281. typedef SInt64 FSSize;
  282. /*
  283.     FSVolumeObjID
  284.         A run-time value that identifies a particular volume.  It may be used
  285.         from any process (and passed between processes).  It becomes invalid
  286.         when the volume is unmounted.  Note: FSVolumeObjID's are not reused
  287.         immediately, so you can use notifications to invalidate any
  288.         FSVolumeObjID's you may have in your own structures.
  289.         
  290.         For most File Manager operations, you will want to use the
  291.         FSVolumeObjIDResolve call to obtain an FSObjectRef for the volume.
  292. */
  293. typedef ObjectID FSVolumeObjID;
  294. /*
  295.     FSVolumeSetObjID
  296.         A run-time value that identifies a particular set of volumes.  It may
  297.         be used from any process (and passed between processes).  It becomes
  298.         invalid when the volume set is deleted.  Note: FSVolumeSetObjID's are
  299.         not reused immediately, so you can use notifications to invalidate any
  300.         FSVolumeSetObjID's you may have in your own structures.
  301.         
  302.         Note: At this time, there is only one FSVolumeSetObjID:
  303.             kFStheBootVolumeSetObject.  This corresponds to the set of volumes
  304.             you would see on the Finder's desktop.  In the future, there may
  305.             be other volume sets.  The value kFStheBootVolumeSetObject will
  306.             always be valid.
  307.  
  308.         For most File Manager operations, you will want to use the
  309.         FSVolumeSetGetInformation call to obtain an FSObjectRef for the volume
  310.         set.
  311. */
  312. typedef ObjectID FSVolumeSetObjID;
  313. /*
  314. ****************************************************************************
  315.     MACROS
  316. ****************************************************************************
  317. */
  318. /*
  319.     M_AssignStructToFileManagerSimplePropertyTag
  320.         A macro to copy an FSFileManagerSimplePropertyTag to the tag field
  321.         of an FSProperty.  The value being copied may be a pointer to any
  322.         type; it will be treated as a pointer to a FSFileManagerSimplePropertyTag.
  323.     
  324.     strctAdrs    (first parameter)
  325.         Pointer to source tag (i.e. the value being copied).
  326.     tgAdrs        (second parameter)
  327.         Pointer to the destination tag (i.e. the place to copy to).
  328. */
  329. #define M_AssignStructToFileManagerSimplePropertyTag(strctAdrs, tgAdrs) \
  330.  *(FSFileManagerSimplePropertyTag *)(tgAdrs) = *(FSFileManagerSimplePropertyTag *)(strctAdrs)
  331. /*
  332.     M_AssignStructToFileManagerForkPropertyTag
  333.         A macro to copy an FSForkPropertyTag to the tag field of an FSProperty.
  334.         The value being copied may be a pointer to any type; it will be treated
  335.         as a pointer to a FSFileManagerSimplePropertyTag.
  336.     
  337.     strctAdrs    (first parameter)
  338.         Pointer to source tag (i.e. the value being copied).
  339.     tgAdrs        (second parameter)
  340.         Pointer to the destination tag (i.e. the place to copy to).
  341. */
  342. #define M_AssignStructToFileManagerForkPropertyTag(strctAdrs, tgAdrs) \
  343.  *(FSForkPropertyTag *)(tgAdrs) = *(FSForkPropertyTag *)(strctAdrs)
  344. /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C o n t a i n e r s <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
  345. /*
  346. ****************************************************************************
  347.     OBJECTS
  348. ****************************************************************************
  349. */
  350. /*
  351.     FSObjectPersistentReference
  352.         A structure used to persistently identify an object on a given volume.
  353.         It is the caller's responsibility to keep track of the volume associated
  354.         with the object.
  355.         
  356.         A persistent reference is a best-effort attempt to identify an object
  357.         over time.  For volume formats that have unique identifiers for all
  358.         objects on a volume, those identifiers would usually be part of the
  359.         persistent reference.  It may also contain other information to help
  360.         locate or verify the object (especially if there are no unique identifiers,
  361.         or they are reused quickly).
  362.         
  363.         It is up to the volume format to determine what to store in a persistent
  364.         reference.  For some volume formats, changes to the object may cause the
  365.         persistent reference to no longer find the object.  It is even possible
  366.         that a change to one or more objects may cause the persistent reference
  367.         to resolve to a different object (which appears to be the original object).
  368. */
  369. struct FSObjectPersistentReference {
  370.     ByteCount                         count;
  371.     UInt32                             reference[1];
  372. };
  373. typedef struct FSObjectPersistentReference FSObjectPersistentReference;
  374.  
  375. typedef FSObjectPersistentReference *FSObjectPersistentReferencePtr;
  376. /*
  377.     FSObjectRef
  378.         A run-time identifier for an object controlled by the File Manager.
  379.         FSObjectRef's are used by almost every call that indicates an object.
  380.         FSObjectRef's are allocated and disposed on a per-process basis.  If
  381.         multiple processes have an FSObjectRef for the same object, then the
  382.         FSObjectRef's will have the same value.  If an FSObjectRef is disposed
  383.         and later allocated for the same object, a different value for the
  384.         FSObjectRef may be returned.
  385.         
  386.         Allocated FSObjectRef's consume memory and other resources inside the
  387.         File Manager.  You should dispose of them when you no longer need to
  388.         identify the object.  When a process terminates, all of its object
  389.         ref's are disposed.
  390.         
  391.         When an FSObjectRef is returned by a File Manager call, it is auto-
  392.         matically allocated for the caller's process.  This is true even when
  393.         the FSObjectRef is returned as a property of an object (as well as
  394.         an explicit output parameter of type FSObjectRef).
  395.         
  396.         There are calls to obtain an FSObjectRef for an object specified by
  397.         FSVolumeObjID, FSVolumeSetObjID, and persistent reference.  There
  398.         are calls to allocate an FSObjectRef for another process, or allocate
  399.         another copy for your own process.  There are calls to dispose an
  400.         FSObjectRef, or dispose many of them at once (typically for cleaning
  401.         up after having FSObjectRef's returned as properties by some other
  402.         call).
  403. */
  404. typedef struct OpaqueFSObjectRef* FSObjectRef;
  405. /**/
  406. extern const FSObjectRef kFStheNullObjectRef;
  407. /*
  408. ============================================================================
  409.     theBootVolumeSet
  410. ============================================================================
  411. */
  412. /*
  413.     kFStheBootVolumeObject
  414.         An FSVolumeObjID for the volume that the system was booted from.
  415.     kFStheBootVolumeSetObject
  416.         An FSVolumeSetObjID for the volume set containing the boot volume.
  417. */
  418. extern const FSVolumeObjID kFStheBootVolumeObject;
  419. extern const FSVolumeSetObjID kFStheBootVolumeSetObject;
  420. /*
  421. ============================================================================
  422.     Volumes
  423. ============================================================================
  424. */
  425. /*
  426.     FSMountAccessConstraints
  427.         Specifies which operations can be performed on a volume by the indicated
  428.         tasks.  These constraints are given when the volume is mounted.  They
  429.         would typically be used by utility programs that need exclusive access
  430.         to a volume.
  431.     
  432.     allowThisTask
  433.         Operations allowed on the volume, for the task that mounted the volume.
  434.     denyThisKernelProcess
  435.         Operations forbidden on the volume, for any task in the process that
  436.         mounted the volume (other than the task that actually mounted the volume).
  437.         //•• This seems non-sensical, given the transitory nature of some tasks.
  438.     denyOtherKernelProcesses
  439.         Operations forbidden on the volume, for all processes other than the
  440.         one that mounted the volume.
  441.         
  442.     //•• These clearly shouldn't be FSObjectPrivileges.  There should be some
  443.     //•• other type for privileges or contstraints on mounting (since object
  444.     //•• privileges explicitly refer to forks).
  445. */
  446. struct FSMountAccessConstraints {
  447.     FSObjectPrivileges                 allowThisTask;
  448.     FSObjectPrivilegesDenied         denyThisKernelProcess;
  449.     FSObjectPrivilegesDenied         denyOtherKernelProcesses;
  450. };
  451. typedef struct FSMountAccessConstraints FSMountAccessConstraints;
  452.  
  453. typedef FSMountAccessConstraints *FSMountAccessConstraintsPtr;
  454. /*
  455. ****************************************************************************
  456.     PROPERTIES
  457. ****************************************************************************
  458. */
  459. /*
  460.     FSPropertyCreator
  461.         Analogous to a file's creator, this is the creator for a property or
  462.         set of properties.  This can also be thought of as a class of properties.
  463.         A property's creator defines which selectors are allowed.
  464.         
  465.         For example, the creator kFSFileManagerCreator is used for all properties
  466.         defined by the File Manager (such as an object's name, creation date,
  467.         object ref, etc.).  The creator kFSUserExperienceCreator is used for
  468.         properties used by the user experience (such as the Finder); it includes
  469.         properties such as icons and comments.
  470.         
  471.         When application-defined properties are supported, an application could
  472.         define and create new properties whose creator is the same as the creator
  473.         for their application.
  474. */
  475. typedef OSType FSPropertyCreator;
  476. /*
  477.     FSPropertySelector
  478.         Analogous to a file's type, this identifies a specific property within a given
  479.         creator (or class of properties). The set of allowable selectors and their
  480.         meanings are defined based on the property's creator.
  481.         
  482.         The same selector may be used with different creators for completely different
  483.         properties.
  484.         
  485.         There is one selector that is reserved regardless of creator:
  486.         kFSForkPropertySelector.
  487.         
  488.         //•• Should Apple reserve values consisting of no upper-case letters, much like
  489.         //•• we reserve creators?
  490. */
  491. typedef OSType FSPropertySelector;
  492. /*
  493.     FSPropertyAttribute
  494.         Identifies a particular attribute of a given property (as specified by
  495.         creator and selector).  You are most likely to use the value and size
  496.         attributes of a property.
  497.         
  498.         Apple Computer reserves the right to define the set of valid attributes.
  499. */
  500. typedef OSType FSPropertyAttribute;
  501. /*
  502.     FSPropertyTag
  503.         Allows you to identify a particular instance, version, or format of
  504.         a property.  A FSPropertyTag is an opaque structure of 8 bytes.  The
  505.         actual format is defined by the property's creator (and possibly selector).
  506.         
  507.         An object may have multiple instances of a given property.  For example, a
  508.         word processor document might have an author property; if there is more
  509.         than one author, there could be multiple instances of the property.  You
  510.         would use the tag to indicate which instance you want.  A property's
  511.         creator would typically define a data type for their tag(s), and possibly
  512.         a function or macro to help in assigning them.
  513.         
  514.         Likewise, an object may have multiple formats.  For example, an object's
  515.         name can bet set or retrieved as: a text object, a Pascal string (ASCII
  516.         text with leading length byte), a C string (ASCII text with trailing 0
  517.         byte), or as pure ASCII text (whose length is denoted by the size attribute).
  518.         
  519.         Many property tags contain a version subfield.  These would be used to
  520.         indicate a particular version of a header file that defines the tag.  This
  521.         way, if the format of the property changes over time, older client code
  522.         could potentially access the property in the older format by setting the
  523.         version in the tag properly.
  524. */
  525. /*•• this is needed to force our distinguished constants out of the code section*/
  526. typedef void *FSPropertyTag[2];
  527. /*
  528.     FSProperty
  529.         Compeletely specifies a given instance (or version or format) of a
  530.         given attribute of a given property (i.e. creator and selector).
  531. */
  532. struct FSProperty {
  533.     FSPropertyCreator                 creator;
  534.     FSPropertySelector                 selector;
  535.     FSPropertyAttribute             attribute;
  536.     FSPropertyTag                     tag;
  537. };
  538. typedef struct FSProperty FSProperty;
  539.  
  540. typedef FSProperty *FSPropertyPtr;
  541. /*
  542. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  543.     Distinguished FSProperty Creators
  544. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  545. */
  546. /*
  547.     FSPropertyDistinguishedCreators
  548.         These are the well-known creators used in properties.
  549.     kFSFileManagerCreator
  550.         Properties defined by the File Manager itself (such as an object's
  551.         name, creation date, etc.).
  552.     kFSUserExperienceCreator
  553.         Properties defined by Apple's user experience (such as the Finder);
  554.         includes such properties as an object's icon or comment.
  555.     kFSUniverseCreator
  556.         Properties unique to the Universe object, that would not be applicable
  557.         to other objects.
  558.     kFSBootVolumeSetCreator
  559.         Properties unique to the boot volume set, that would not be applicable
  560.         to other objects.
  561.         //•• shouldn't this be just a volume set creator?  Presumably, it would
  562.         //•• be used for properties that might be supported by other volume sets.
  563. */
  564.  
  565. enum {
  566.     kFSFileManagerCreator        = 'fmgr',
  567.     kFSUniverseCreator            = 'fmun',
  568.     kFSBootVolumeSetCreator        = 'fmbv',
  569.     kFSUserExperienceCreator    = 'uexp'
  570. };
  571.  
  572. /*
  573. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  574.     Fork Property Distinguished Selector
  575. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  576. */
  577. /*
  578.     FSForkPropertyDistinguishedSelector
  579.         These are the set of selectors that are reserved across all creators.
  580.     kFSForkPropertySelector
  581.         This selector indicates a fork property: a property whose value attribute
  582.         is a fork value attribute.  The value can be accessed as an FSStream
  583.         or as a mapped file.  All other properties, or other attributes of a
  584.         fork property may not be accessed this way.
  585. */
  586.  
  587. enum {
  588.     kFSForkPropertySelector        = 'fork'                        /*••*/
  589. };
  590.  
  591. /*
  592. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  593.     Distinguished FSProperty Attributes
  594. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  595. */
  596. /*
  597.     FSPropertyDistinguishedAttributes
  598.         These are the defined attributes for all properties.
  599.     
  600.     kFSValueAttribute
  601.         The value of a property.  It consists of 0 to 2^63 bytes for fork
  602.         properties, or 0 to (2^32)-1 bytes for non-fork properties.  For
  603.         non-fork properties, the value must be accessed all at once.
  604.         
  605.         When retrieved, your buffer must be big enough to store the entire
  606.         value.  The File Manager will not truncate or pad any value.  (If
  607.         you supply more space than is required, the extra bytes will be
  608.         unchanged).
  609.         
  610.         For fork properties, you use the FSStream or mapped file calls,
  611.         which allow you to access part of the value.
  612.     kFSSizeAttribute
  613.         The size (in bytes) of a property's value.  This may require up
  614.         to 8 bytes to store (in the case of a fork property; for non-fork
  615.         properties, it requires at most 4 bytes to store).  Since the File
  616.         Manager knows this is numeric, you may supply 1, 2, 4, or 8 bytes
  617.         when getting or setting a size.  The File Manager will coerce the
  618.         value to or from the given size.  If you supply fewer than 8 bytes,
  619.         and the actual size cannot be represented in the given number of
  620.         bytes, then you will get the E_PropertyBufferFieldTooSmall error.
  621.     kFSTypeAttribute
  622.         This is a basic description of the type of data (i.e. its format)
  623.         stored in a property.  This may be helpful when trying to interpret
  624.         properties that you don't know about.  Note: this is not an attempt
  625.         to give detailed information about the data type stored in a property.
  626.         This attribute is always 4 bytes long.
  627.     kFSNullAttribute
  628.         Used to indicate a non-existent attribute (for the null property).
  629.         This is the attribute field of the null property.  See also
  630.         kFSFileManagerNullProperty.  This attribute is always 0 bytes long.
  631.     kFSForkPhysicalSizeAttribute
  632.         This is the amount of physical storage allocated for a fork property's
  633.         value on the volume's media.  Note that this can be more or less than
  634.         the size attribute (kFSSizeAttribute), depending on how the volume
  635.         has allocated space for the property, and even the property's value.
  636.         
  637.         This attribute is a legacy for certain older APIs.  Its use is
  638.         discouraged.  This attribute may be obsoleted in the future.
  639.         
  640.         This attribute is up to 8 bytes in length.  It follows the same
  641.         rules as kFSSizeAttribute for coercion to smaller lengths. 
  642.     kFSStateAttribute
  643.         This attribute contains dynamic state information about a property.
  644.         It consists of a series of flags; these flags are common to all
  645.         properties.
  646.         
  647.         This attribute is not currently supported.  It is intended to be
  648.         used for things such as a read-only flag on a property-by-property
  649.         basis.  Since it is dynamic, it would tend to reflect any temporary
  650.         software locks.
  651.     kFSPolicyAttribute
  652.         This attribute contains policy (static) information about a property.
  653.         It consists of a series of flags; these flags are common to all
  654.         properties.
  655.         
  656.         This attribute is not currently supported.
  657. */
  658.  
  659. enum {
  660.     kFSValueAttribute            = 'valu',
  661.     kFSSizeAttribute            = 'size',
  662.     kFSTypeAttribute            = 'type',
  663.     kFSNullAttribute            = 'null',
  664.     kFSForkPhysicalSizeAttribute = 'fsiz',
  665.     kFSStateAttribute            = 'stat',
  666.     kFSPolicyAttribute            = 'plcy'
  667. };
  668.  
  669. /*
  670. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  671.     Distinguished FSProperty Tag Templates
  672. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  673. */
  674. /*
  675.     FSForkType
  676.         A list of the defined types of the File Manager's fork property.
  677.         These values would appear in the forkType field of the property tag
  678.         for a fork.  Remember, there is only one fork property; use the forkType
  679.         to select which kind of fork you want.
  680.     
  681.     kFSDataFork
  682.         Specifies the data fork.  This is the same as the data fork from the
  683.         Files API, or the normal file contents of single-forked file systems
  684.         such as MS-DOS or Unix.
  685.     kFSResourceFork
  686.         Specifies the resource fork.  This is the same as the resource fork from
  687.         the Files API.
  688. */
  689.  
  690. enum {
  691.     kFSInvalidForkType            = 0,
  692.     kFSDataFork                    = 1,
  693.     kFSResourceFork                = 2
  694. };
  695.  
  696. typedef UInt16 FSForkType;
  697. /*
  698.     FSForkPropertyTag
  699.         The property tag used for the File Manager's fork property.  You can
  700.         declare a variable of this type, fill out the individual fields, then
  701.         use the M_AssignStructToFileManagerForkPropertyTag macro to copy the
  702.         tag into a more opaque (and generic) property tag stored in a normal
  703.         FSProperty.
  704.     
  705.     version
  706.         Version of the property and tag.  This should be set to the value
  707.         kFSCurrentReleasedVersion.
  708.     forkType
  709.         Specifies which kind of fork.  See FSForkType.
  710.     instance
  711.         Specifies which instance of the given kind of fork.  
  712. */
  713. struct FSForkPropertyTag {
  714.     UInt16                             version;
  715.     FSForkType                         forkType;
  716.     UInt32                             instance;
  717. };
  718. typedef struct FSForkPropertyTag FSForkPropertyTag;
  719.  
  720. typedef FSForkPropertyTag *FSForkPropertyTagPtr;
  721. /*
  722. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  723.     Volume Set Distinguished Selector
  724. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  725. */
  726. /**/
  727.  
  728. enum {
  729.     kFSVolumeSet                = 'vlm#'                        /*••*/
  730. };
  731.  
  732. /*
  733. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  734.     Distinguished Properties by Creator
  735. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  736. */
  737. /*
  738. ============================================================================
  739.     Distinguished FileManager Universe (kFSUniverseCreator) Properties  
  740. ============================================================================
  741. */
  742. /*
  743. ----------------------------------------------------------------------------
  744.     Distinguished FileManager Universe (kFSUniverseCreator) Selectors
  745. ----------------------------------------------------------------------------
  746. */
  747. /**/
  748.  
  749. enum {
  750.     kFSCreatorList                = 'crt#',                        /*••*/
  751.     kFSVolumeSetList            = 'vls#',                        /*••*/
  752.     kFSBootVolume                = 'btvl'                        /*••*/
  753. };
  754.  
  755. /*
  756. ----------------------------------------------------------------------------
  757.     Distinguished FileManager Universe  (kFSUniverseCreator) Constants
  758. ----------------------------------------------------------------------------
  759. */
  760. extern const FSProperty                    kFSUniverseCreatorListPropertyValue;
  761. extern const FSProperty                    kFSUniverseVolumeSetListPropertyValue;
  762. extern const FSProperty                    kFSUniverseBootVolumePropertyValue;
  763. extern const FSProperty                    kFSUniverseCreatorListPropertyTemplate;
  764. extern const FSProperty                    kFSUniverseVolumeSetListPropertyTemplate;
  765. extern const FSProperty                    kFSUniverseBootVolumePropertyTemplate;
  766. /*
  767. ============================================================================
  768.     Distinguished FileManager BootVolumeSet (kFSBootVolumeSetCreator) Properties  
  769. ============================================================================
  770. */
  771. /*
  772. ----------------------------------------------------------------------------
  773.     Distinguished FileManager BootVolumeSet (kFSBootVolumeSetCreator) Constants
  774. ----------------------------------------------------------------------------
  775. */
  776. extern const FSProperty                    kFSBootVolumeSetVolumeListPropertyValue;
  777. extern const FSProperty                    kFSBootVolumeSetVolumeListPropertyTemplate;
  778. /*
  779. ============================================================================
  780.     Distinguished FileManager (kFSFileManagerCreator) Properties  
  781. ============================================================================
  782. */
  783. /*
  784. ----------------------------------------------------------------------------
  785.     Distinguished FileManager (kFSFileManagerCreator) Selectors
  786. ----------------------------------------------------------------------------
  787. */
  788. /**/
  789.  
  790. enum {
  791.     kFSNullPropertySelector        = 'null',                        /*••*/
  792.     kFSForkProperty                = 'fork',                        /*••*/
  793.     kFSForkPropertyList            = 'frk#',                        /*••*/
  794.     kFSSimplePropertyList        = 'smp#',                        /*••*/
  795.     kFSPropertyList                = 'fsp#',                        /*••*/
  796.     kFSPropertyDescriptorList    = 'pdr#',                        /*••*/
  797.     kFSObjectContainerObjectRef    = 'ocor',                        /*••*/
  798.     kFSObjectContainerObjectType = 'ocot',                        /*••*/
  799.     kFSObjectContainerPersistentReference = 'ocpr',                /*••*/
  800.     kFSObjectRef                = 'oref',                        /*••*/
  801.     kFSObjectPersistentReference = 'pref',                        /*••*/
  802.     kFSObjectType                = 'otyp',                        /*••*/
  803.     kFSObjectName                = 'onam',                        /*••*/
  804.     kFSObjectCreationDate        = 'cdat',                        /*••*/
  805.     kFSObjectModificationDate    = 'mdat',                        /*••*/
  806.     kFSObjectBackupDate            = 'bdat',                        /*••*/
  807.     kFSObjectAccessDate            = 'adat',                        /*••*/
  808.     kFSObjectLock                = 'olck',                        /*••*/
  809.     kFSObjectCumulativeModificationDate = 'cmdt',                /*••*/
  810.     kFSObjectCumulativeBackupDate = 'cbdt',                        /*••*/
  811.     kFSObjectCumulativeAccessDate = 'cadt',                        /*••*/
  812.     kFSVolumeCreationDate        = 'vcdt',                        /*••*/
  813.     kFSVolumeModificationDate    = 'vmdt',                        /*••*/
  814.     kFSVolumeBackupDate            = 'vbdt',                        /*••*/
  815.     kFSVolumeFileCount            = 'vflc',                        /*••*/
  816.     kFSVolumeFolderCount        = 'vfdc',                        /*••*/
  817.     kFSVolumeObjectCount        = 'vobc',                        /*••*/
  818.     kFSVolumeFormat                = 'vfmt',                        /*••*/
  819.     kFSVolumeCapability            = 'vcap',                        /*••*/
  820.     kFSVolumeBlockCount            = 'vbct',                        /*••*/
  821.     kFSVolumeBlockFreeCount        = 'vbfr',                        /*••*/
  822.     kFSVolumeBlockSize            = 'vbsz',                        /*••*/
  823.     kFSVolumeSize                = 'vsiz',                        /*••*/
  824.     kFSVolumeFreeSize            = 'vbfs',                        /*••*/
  825.     kFSVolumeIOQuanta            = 'vioq',                        /*••*/
  826.     kFSVolumeLock                = 'vlck',                        /*••*/
  827.     kFSFileCount                = 'filc',                        /*••*/
  828.     kFSFolderCount                = 'fldc',                        /*••*/
  829.     kFSObjectCount                = 'objc',                        /*••*/
  830.     kFSVolumeStartupFolderObjectRef = 'strt'                    /*••*/
  831. };
  832.  
  833. /*
  834. ----------------------------------------------------------------------------
  835.     Distinguished FileManager (kFSFileManagerCreator) Constants
  836. ----------------------------------------------------------------------------
  837. */
  838. extern const FSProperty                    kFSFileManagerNullProperty;
  839. /**/
  840. extern const FSProperty                    kFSFileManagerForkPropertyValue;
  841. extern const FSProperty                    kFSFileManagerForkPropertySize;
  842. extern const FSProperty                    kFSFileManagerForkPropertyTemplate;
  843. /**/
  844. extern const FSProperty                    kFSFileManagerForkPropertyListPropertyValue;
  845. extern const FSProperty                    kFSFileManagerSimplePropertyListPropertyValue;
  846. extern const FSProperty                    kFSFileManagerPropertyListPropertyValue;
  847. extern const FSProperty                    kFSFileManagerPropertyDescriptorListPropertyValue;
  848. extern const FSProperty                    kFSFileManagerForkPropertyListPropertyTemplate;
  849. extern const FSProperty                    kFSFileManagerSimplePropertyListPropertyTemplate;
  850. extern const FSProperty                    kFSFileManagerPropertyListPropertyTemplate;
  851. extern const FSProperty                    kFSFileManagerPropertyDescriptorListPropertyTemplate;
  852. /**/
  853. extern const FSProperty                    kFSFileManagerObjectContainerObjectRefPropertyValue;
  854. extern const FSProperty                    kFSFileManagerObjectContainerObjectTypePropertyValue;
  855. extern const FSProperty                    kFSFileManagerObjectContainerPersistentReferencePropertyValue;
  856. extern const FSProperty                    kFSFileManagerObjectRefPropertyValue;
  857. extern const FSProperty                    kFSFileManagerObjectPersistentReferencePropertyValue;
  858. extern const FSProperty                    kFSFileManagerObjectTypePropertyValue;
  859. extern const FSProperty                    kFSFileManagerObjectNamePropertyValue;
  860. extern const FSProperty                    kFSFileManagerObjectCreationDatePropertyValue;
  861. extern const FSProperty                    kFSFileManagerObjectModificationDatePropertyValue;
  862. extern const FSProperty                    kFSFileManagerObjectBackupDatePropertyValue;
  863. extern const FSProperty                    kFSFileManagerObjectAccessDatePropertyValue;
  864. extern const FSProperty                    kFSFileManagerObjectLockPropertyValue;
  865. extern const FSProperty                    kFSFileManagerObjectContainerObjectRefPropertyTemplate;
  866. extern const FSProperty                    kFSFileManagerObjectContainerObjectTypePropertyTemplate;
  867. extern const FSProperty                    kFSFileManagerObjectContainerPersistentReferencePropertyTemplate;
  868. extern const FSProperty                    kFSFileManagerObjectRefPropertyTemplate;
  869. extern const FSProperty                    kFSFileManagerObjectPersistentReferencePropertyTemplate;
  870. extern const FSProperty                    kFSFileManagerObjectTypePropertyTemplate;
  871. extern const FSProperty                    kFSFileManagerObjectNamePropertyTemplate;
  872. extern const FSProperty                    kFSFileManagerObjectCreationDatePropertyTemplate;
  873. extern const FSProperty                    kFSFileManagerObjectModificationDatePropertyTemplate;
  874. extern const FSProperty                    kFSFileManagerObjectBackupDatePropertyTemplate;
  875. extern const FSProperty                    kFSFileManagerObjectAccessDatePropertyTemplate;
  876. extern const FSProperty                    kFSFileManagerObjectLockPropertyTemplate;
  877. /**/
  878. extern const FSProperty                    kFSFileManagerObjectCumulativeModificationDatePropertyValue;
  879. extern const FSProperty                    kFSFileManagerObjectCumulativeBackupDatePropertyValue;
  880. extern const FSProperty                    kFSFileManagerObjectCumulativeAccessDatePropertyValue;
  881. extern const FSProperty                    kFSFileManagerObjectCumulativeModificationDatePropertyTemplate;
  882. extern const FSProperty                    kFSFileManagerObjectCumulativeBackupDatePropertyTemplate;
  883. extern const FSProperty                    kFSFileManagerObjectCumulativeAccessDatePropertyTemplate;
  884. /**/
  885. extern const FSProperty                    kFSFileManagerVolumeCreationDatePropertyValue;
  886. extern const FSProperty                    kFSFileManagerVolumeModificationDatePropertyValue;
  887. extern const FSProperty                    kFSFileManagerVolumeBackupDatePropertyValue;
  888. extern const FSProperty                    kFSFileManagerVolumeFileCountPropertyValue;
  889. extern const FSProperty                    kFSFileManagerVolumeFolderCountPropertyValue;
  890. extern const FSProperty                    kFSFileManagerVolumeObjectCountPropertyValue;
  891. extern const FSProperty                    kFSFileManagerVolumeFormatPropertyValue;
  892. extern const FSProperty                    kFSFileManagerVolumeCapabilityPropertyValue;
  893. extern const FSProperty                    kFSFileManagerVolumeBlockCountPropertyValue;
  894. extern const FSProperty                    kFSFileManagerVolumeBlockFreeCountPropertyValue;
  895. extern const FSProperty                    kFSFileManagerVolumeBlockSizePropertyValue;
  896. extern const FSProperty                    kFSFileManagerVolumeSizePropertyValue;
  897. extern const FSProperty                    kFSFileManagerVolumeFreeSizePropertyValue;
  898. extern const FSProperty                    kFSFileManagerVolumeIOQuantaPropertyValue;
  899. extern const FSProperty                    kFSFileManagerVolumeLockPropertyValue;
  900. extern const FSProperty                    kFSFileManagerVolumeCreationDatePropertyTemplate;
  901. extern const FSProperty                    kFSFileManagerVolumeModificationDatePropertyTemplate;
  902. extern const FSProperty                    kFSFileManagerVolumeBackupDatePropertyTemplate;
  903. extern const FSProperty                    kFSFileManagerVolumeFileCountPropertyTemplate;
  904. extern const FSProperty                    kFSFileManagerVolumeFolderCountPropertyTemplate;
  905. extern const FSProperty                    kFSFileManagerVolumeObjectCountPropertyTemplate;
  906. extern const FSProperty                    kFSFileManagerVolumeFormatPropertyTemplate;
  907. extern const FSProperty                    kFSFileManagerVolumeCapabilityPropertyTemplate;
  908. extern const FSProperty                    kFSFileManagerVolumeBlockCountPropertyTemplate;
  909. extern const FSProperty                    kFSFileManagerVolumeBlockFreeCountPropertyTemplate;
  910. extern const FSProperty                    kFSFileManagerVolumeBlockSizePropertyTemplate;
  911. extern const FSProperty                    kFSFileManagerVolumeSizePropertyTemplate;
  912. extern const FSProperty                    kFSFileManagerVolumeFreeSizePropertyTemplate;
  913. extern const FSProperty                    kFSFileManagerVolumeIOQuantaPropertyTemplate;
  914. extern const FSProperty                    kFSFileManagerVolumeLockPropertyTemplate;
  915. /**/
  916. extern const FSProperty                    kFSFileManagerFileCountPropertyValue;
  917. extern const FSProperty                    kFSFileManagerFolderCountPropertyValue;
  918. extern const FSProperty                    kFSFileManagerObjectCountPropertyValue;
  919. extern const FSProperty                    kFSFileManagerFileCountPropertyTemplate;
  920. extern const FSProperty                    kFSFileManagerFolderCountPropertyTemplate;
  921. extern const FSProperty                    kFSFileManagerObjectCountPropertyTemplate;
  922. /**/
  923. extern const FSProperty                    kFSFileManagerVolumeStartupFolderObjectRefValue;
  924. extern const FSProperty                    kFSFileManagerVolumeStartupFolderObjectRefTemplate;
  925. /*
  926. ============================================================================
  927.     Distinguished UserExperience (kFSUserExperienceCreator) Properties  
  928. ============================================================================
  929. */
  930. /*
  931. ----------------------------------------------------------------------------
  932.     Distinguished UserExperience (kFSUserExperienceCreator) Selectors
  933. ----------------------------------------------------------------------------
  934. */
  935. /*
  936.     The first five selectors are properties of a container and take an ObjectSpecification
  937.     to an object on a volume. The remaining properties are properties of a volume and take
  938.     an ObjectSpecification to the volume in question.
  939. */
  940.  
  941. enum {
  942.     kFSFinderBasicInfo            = 'bfin',                        /* The old style FInfo record.*/
  943.     kFSFinderExtendedInfo        = 'xfin',                        /* The old style FXInfo record.*/
  944.     kFSFinderVolumeInfo            = 'fvin',                        /* Eight longwords of private Finder volume information*/
  945.     kFSDocumentType                = 'type',                        /* Just the finder fdType information.*/
  946.     kFSDocumentCreator            = 'crtr',                        /* Just the finder fdCreator information.*/
  947.     kFSComment                    = 'cmnt',                        /* The comment from the DTDB for an object.*/
  948.                                                                 /* */
  949.     kFSApplication                = 'APPL',                        /* Returns a FSObjectRef to the most recent */
  950.                                                                 /* application specified in tag.*/
  951.     kFSApplicationList            = 'APP#',                        /* Returns a list of 'APPL's*/
  952.     kFSLargeIcon                = 'ICN#',                        /* The tag for this property is a type/creator pair*/
  953.     kFSLarge4BitIcon            = 'icl4',                        /* The tag for this property is a type/creator pair*/
  954.     kFSLarge8BitIcon            = 'icl8',                        /* The tag for this property is a type/creator pair*/
  955.     kFSSmallIcon                = 'ics#',                        /* The tag for this property is a type/creator pair*/
  956.     kFSSmall4BitIcon            = 'ics4',                        /* The tag for this property is a type/creator pair*/
  957.     kFSSmall8BitIcon            = 'ics8'                        /* The tag for this property is a type/creator pair*/
  958. };
  959.  
  960. /*
  961. ----------------------------------------------------------------------------
  962.     Distinguished UserExperience (kFSUserExperienceCreator) Constants
  963. ----------------------------------------------------------------------------
  964. */
  965. extern const FSProperty                    kFSUserExperienceFinderBasicInfoPropertyValue;
  966. extern const FSProperty                    kFSUserExperienceFinderExtendedInfoPropertyValue;
  967. extern const FSProperty                    kFSUserExperienceFinderVolumeInfoPropertyValue;
  968. extern const FSProperty                    kFSUserExperienceDocumentTypePropertyValue;
  969. extern const FSProperty                    kFSUserExperienceDocumentCreatorPropertyValue;
  970. extern const FSProperty                    kFSUserExperienceCommentPropertyValue;
  971. extern const FSProperty                    kFSUserExperienceFinderBasicInfoPropertyTemplate;
  972. extern const FSProperty                    kFSUserExperienceFinderExtendedInfoPropertyTemplate;
  973. extern const FSProperty                    kFSUserExperienceFinderVolumeInfoPropertyTemplate;
  974. extern const FSProperty                    kFSUserExperienceDocumentTypePropertyTemplate;
  975. extern const FSProperty                    kFSUserExperienceDocumentCreatorPropertyTemplate;
  976. extern const FSProperty                    kFSUserExperienceCommentPropertyTemplate;
  977. extern const FSProperty                    kFSUserExperienceApplicationPropertyValue;
  978. extern const FSProperty                    kFSUserExperienceApplicationPropertyTemplate;
  979. extern const FSProperty                    kFSUserExperienceApplicationListPropertyValue;
  980. extern const FSProperty                    kFSUserExperienceLargeIconPropertyValue;
  981. extern const FSProperty                    kFSUserExperienceLarge4BitIconPropertyValue;
  982. extern const FSProperty                    kFSUserExperienceLarge8BitIconPropertyValue;
  983. extern const FSProperty                    kFSUserExperienceSmallIconPropertyValue;
  984. extern const FSProperty                    kFSUserExperienceSmall4BitIconPropertyValue;
  985. extern const FSProperty                    kFSUserExperienceSmall8BitIconPropertyValue;
  986. extern const FSProperty                    kFSUserExperienceApplicationListPropertyTemplate;
  987. extern const FSProperty                    kFSUserExperienceLargeIconPropertyTemplate;
  988. extern const FSProperty                    kFSUserExperienceLarge4BitIconPropertyTemplate;
  989. extern const FSProperty                    kFSUserExperienceLarge8BitIconPropertyTemplate;
  990. extern const FSProperty                    kFSUserExperienceSmallIconPropertyTemplate;
  991. extern const FSProperty                    kFSUserExperienceSmall4BitIconPropertyTemplate;
  992. extern const FSProperty                    kFSUserExperienceSmall8BitIconPropertyTemplate;
  993. /*
  994. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  995.     Object Property Simple Value Types
  996. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  997. */
  998. /*
  999.     FSSimplePropertyValueType
  1000. */
  1001.  
  1002. enum {
  1003.     kFSVTInvalidValueType        = 0,
  1004.     kFSVTSInt8                    = 1,
  1005.     kFSVTUInt8                    = 2,
  1006.     kFSVTSInt16                    = 3,
  1007.     kFSVTUInt16                    = 4,
  1008.     kFSVTSInt32                    = 5,
  1009.     kFSVTUInt32                    = 6,
  1010.     kFSVTSInt64                    = 7,
  1011.     kFSVTUInt64                    = 8,
  1012.     kFSVTBoolean                = 9,
  1013.     kFSVTByteCount                = 10,
  1014.     kFSVTByteOffset                = 11,
  1015.     kFSVTItemCount                = 12,
  1016.     kFSVTOptionBits                = 13,
  1017.     kFSVTBufferDescriptor        = 14,
  1018.     kFSVTBufferElementDescriptor = 15,
  1019.     kFSVTOSType                    = 16,
  1020.     kFSVTCStr                    = 17,
  1021.     kFSVTCharacterStr            = 18,
  1022.     kFSVTPStr                    = 19,
  1023.     kFSVTPersistentTextObject    = 20,
  1024.     kFSVTUniCodeStr                = 21,
  1025.     kFSVTDOSDate                = 22,
  1026.     kFSVTISO9660Date            = 23,
  1027.     kFSVTMacDate                = 24,
  1028.     kFSVTUNIXDate                = 25,
  1029.     kFSVTTimeObject                = 26,
  1030.     kFSVTCount                    = 27,
  1031.     kFSVTValueTypeEnumerator    = 28,
  1032.     kFSVTDate                    = 29,
  1033.     kFSVTForkPropertyType        = 30,
  1034.     kFSVTName                    = 31,
  1035.     kFSVTObjectRef                = 32,
  1036.     kFSVTOffset                    = 33,
  1037.     kFSVTPersistentObjectReference = 34,
  1038.     kFSVTProperty                = 35,
  1039.     kFSVTPropertyDescriptor        = 36,
  1040.     kFSVTSize                    = 37,
  1041.     kFSVTEnumeratedValueTypeMask = 0x7F,
  1042.     kFSVTPropertyCreatorDefinedValueType = 0x80
  1043. };
  1044.  
  1045. typedef UInt32 FSSimplePropertyValueType;
  1046. /*
  1047. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1048.     Distinguished FileManager FSProperty Value Templates
  1049. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1050. */
  1051. /*
  1052.     FSFileSystemKind is used to indicate a type of filesystem.
  1053.     Apple reserves values with all lower case letters, and
  1054.     those whose first two bytes are nil (for compatibility
  1055.     with old FSID's)
  1056. */
  1057. typedef OSType FSFileSystemKind;
  1058. /**/
  1059.  
  1060. enum {
  1061.     kFSInvalidObjectType        = 0x00000000,
  1062.     kFStheUniverse                = 0x00000001,
  1063.     kFStheBootVolumeSet            = 0x00000002,
  1064.     kFSVolume                    = 0x00000004,
  1065.     kFSFolder                    = 0x00000008,
  1066.     kFSFile                        = 0x00000010
  1067. };
  1068.  
  1069. typedef OptionBits FSObjectType;
  1070. /*
  1071.     FSBlockCount holds a number of blocks (such as total blocks or free blocks on
  1072.     a volume).
  1073.     
  1074.     FSBlockNum holds a number specifying a fork block or a volume block.
  1075.     
  1076.     •• Eventually, we will get rid of these private types and use the one
  1077.     defined by BlockStorage.  Also note that the value is intentionally signed.
  1078.     This solves several problems that arise from the lack of proper 64 bit math
  1079.     support.  
  1080. */
  1081. typedef SInt64 FSBlockCount;
  1082. typedef SInt64 FSBlockNum;
  1083. /**/
  1084.  
  1085. enum {
  1086.     kFSUnspecifiedVolumeCapabilities = 0x00000000,
  1087.     kFSSupportsNotification        = 0x00000001,
  1088.     kFSSupportsAFPPermissions    = 0x00000002,
  1089.     kFSSupportsACLPermissions    = 0x00000004,
  1090.     kFSSupportsLogicalToPhysical = 0x00000008,
  1091.     kFSSupportsRangeLocking        = 0x00000010,
  1092.     kFSFilesAPILooselyCompliant    = 0x00000020,
  1093.     kFSFilesAPIStrictlyCompliant = 0x00000040,
  1094.     kFSSupportsUserProperties    = 0x00000080,
  1095.     kFSSupportsShortNames        = 0x00000100,
  1096.     kFSSupportsFSObjectMove        = 0x00000200,
  1097.     kFSSupportsFSObjectCopy        = 0x00000400,
  1098.     kFSSupportsAccessDeny        = 0x00000800,
  1099.     kFSSupportsBooting            = 0x00001000,
  1100.     kFSSupportsSystem            = 0x00002000,
  1101.     kFSSupportsDesktop            = 0x00004000,
  1102.     kFSIsEjectable                = 0x00008000
  1103. };
  1104.  
  1105. typedef OptionBits FSVolumeCapabilities;
  1106. /**/
  1107. typedef OSType FSVolumeFormat;
  1108. /*
  1109. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1110.     Distinguished FileManager Simple Property Tag Templates
  1111. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1112. */
  1113. /**/
  1114. struct FSFileManagerSimplePropertyTag {
  1115.     FSFileManagerPropertyTagVersion  version;
  1116.     UInt16                             reserved;
  1117.     UInt32                             instance;
  1118. };
  1119. typedef struct FSFileManagerSimplePropertyTag FSFileManagerSimplePropertyTag;
  1120.  
  1121. typedef FSFileManagerSimplePropertyTag *FSFileManagerSimplePropertyTagPtr;
  1122. /*
  1123. ============================================================================
  1124.     FileManager Date Property Tag Templates:
  1125.         kFSObjectCreationDate
  1126.         kFSObjectModificationDate
  1127.         kFSObjectBackupDate
  1128.         kFSObjectAccessDate
  1129.         kFSObjectCumulativeModificationDate
  1130.         kFSObjectCumulativeBackupDate
  1131.         kFSObjectCumulativeAccessDate
  1132. ============================================================================
  1133. */
  1134. /**/
  1135.  
  1136. enum {
  1137.     kFSInvalidDateFormat        = 0,
  1138.     kFSDOSDateFormat            = 1,
  1139.     kFSISO9660DateFormat        = 2,
  1140.     kFSMacDateFormat            = 3,
  1141.     kFSUNIXDateFormat            = 4,
  1142.     kFSTimeObjectFormat            = 5
  1143. };
  1144.  
  1145. typedef UInt16 FSObjectDateType;
  1146. /**/
  1147. struct FSObjectDatePropertyTag {
  1148.     FSFileManagerPropertyTagVersion  version;
  1149.     FSObjectDateType                 dateType;
  1150.     UInt32                             instance;
  1151. };
  1152. typedef struct FSObjectDatePropertyTag FSObjectDatePropertyTag;
  1153.  
  1154. typedef FSObjectDatePropertyTag *FSObjectDatePropertyTagPtr;
  1155. /*
  1156. ============================================================================
  1157.     FileManager Name (kFSObjectName) Property Tag Templates
  1158. ============================================================================
  1159. */
  1160. /**/
  1161.  
  1162. enum {
  1163.     kFSInvalidStringFormat        = 0,
  1164.     kFSCharacterStringFormat    = 1,
  1165.     kFSCStringFormat            = 2,
  1166.     kFSPStringFormat            = 3,
  1167.     kFSUniCodeStringFormat        = 4,
  1168.     kFSPersistentTextObjectStringFormat = 5
  1169. };
  1170.  
  1171. typedef UInt16 FSObjectNameType;
  1172. /**/
  1173. struct FSObjectNamePropertyTag {
  1174.     FSFileManagerPropertyTagVersion  version;
  1175.     FSObjectNameType                 nameType;
  1176.     UInt32                             instance;
  1177. };
  1178. typedef struct FSObjectNamePropertyTag FSObjectNamePropertyTag;
  1179.  
  1180. typedef FSObjectNamePropertyTag *FSObjectNamePropertyTagPtr;
  1181. /*
  1182. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1183.     Distinguished UserExperience FSProperty Value Templates
  1184. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1185. */
  1186. typedef FSObjectRef FSUserExperienceApplicationInfo;
  1187. typedef FSUserExperienceApplicationInfo *FSUserExperienceApplicationInfoPtr;
  1188. typedef FSObjectNameType FSObjectCommentType;
  1189. /*
  1190. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1191.     Distinguished UserExperience FSProperty Tags
  1192. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1193. */
  1194. struct FSIconPropertyTag {
  1195.     OSType                             creator;
  1196.     OSType                             documentType;
  1197. };
  1198. typedef struct FSIconPropertyTag FSIconPropertyTag;
  1199.  
  1200. typedef FSIconPropertyTag *FSIconPropertyTagPtr;
  1201. struct FSApplicationInfoPropertyTag {
  1202.     OSType                             creator;
  1203.     FSObjectRef                     object;
  1204. };
  1205. typedef struct FSApplicationInfoPropertyTag FSApplicationInfoPropertyTag;
  1206.  
  1207. typedef FSApplicationInfoPropertyTag *FSApplicationInfoPropertyTagPtr;
  1208. struct FSObjectCommentPropertyTag {
  1209.     UInt16                             reserved;
  1210.     FSObjectCommentType             commentype;
  1211.     UInt32                             instance;
  1212. };
  1213. typedef struct FSObjectCommentPropertyTag FSObjectCommentPropertyTag;
  1214.  
  1215. typedef FSObjectCommentPropertyTag *FSObjectCommentPropertyTagPtr;
  1216. /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C a p a b i l i t i e s <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
  1217. /*
  1218. ****************************************************************************
  1219.     PROPERTY ACCESS METHODS
  1220. ****************************************************************************
  1221. */
  1222. /*
  1223. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1224.     Object Property Simple Values
  1225. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1226. */
  1227. /*
  1228. ============================================================================
  1229.     Simple Property Access Method (Get/Set/Create/Delete )
  1230. ============================================================================
  1231. */
  1232. /*
  1233.     FSPropertyDescriptor's associate simple FSProperty's with specific instances
  1234.     of their attributes  An attribute location is either an offset within some addressed
  1235.     buffer or the address of the attribute. This is determined from the context those
  1236.     calls that use FSPropertyDescriptors -- if an associated buffer is provided with
  1237.     a property descriptor in a call, the location is an offset.  If the associated
  1238.     buffer is elided, the location is an address.
  1239.     
  1240. */
  1241. struct FSPropertyDescriptor {
  1242.     FSProperty                         property;
  1243.     UInt32                             offsetOrAddress;
  1244.     ByteCount                         length;
  1245. };
  1246. typedef struct FSPropertyDescriptor FSPropertyDescriptor;
  1247.  
  1248. typedef FSPropertyDescriptor *FSPropertyDescriptorPtr;
  1249. /*
  1250. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1251.     Object Property Fork Values
  1252. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1253. */
  1254. /* */
  1255. struct FSForkAccessConstraints {
  1256.     FSObjectPrivileges                 allowThisTask;
  1257.     FSObjectPrivilegesDenied         denyThisKernelProcess;
  1258.     FSObjectPrivilegesDenied         denyOtherKernelProcesses;
  1259. };
  1260. typedef struct FSForkAccessConstraints FSForkAccessConstraints;
  1261.  
  1262. typedef FSForkAccessConstraints *FSForkAccessConstraintsPtr;
  1263. /**/
  1264.  
  1265. enum {
  1266.     kFSAllocAny                    = 0x00000000,                    /* need not be contiguous; partial allocation is OK*/
  1267.     kFSAllocContiguous            = 0x00000001,                    /* if set, allocated space must be contiguous*/
  1268.     kFSAllocAllOrNothing        = 0x00000002                    /* if set, must allocate all of the space asked for (no partial success)*/
  1269. };
  1270.  
  1271. typedef OptionBits FSForkAllocationPolicy;
  1272. /**/
  1273.  
  1274. enum {
  1275.     kFSAtMark                    = 0,
  1276.     kFSFromStart                = 1,
  1277.     kFSFromLEOF                    = 2,
  1278.     kFSFromMark                    = 3
  1279. };
  1280.  
  1281. typedef UInt32 FSForkPosition;
  1282. /* */
  1283. struct FSForkPositionDescriptor {
  1284.     FSOffset                         positionOffset;
  1285.     FSForkPosition                     positionMode;
  1286. };
  1287. typedef struct FSForkPositionDescriptor FSForkPositionDescriptor;
  1288.  
  1289. typedef FSForkPositionDescriptor *FSForkPositionDescriptorPtr;
  1290. /*
  1291. ============================================================================
  1292.     Stream-based Access Method
  1293. ============================================================================
  1294. */
  1295. /**/
  1296.  
  1297. enum {
  1298.     kFSDefaultIOOptions            = 0,
  1299.     kFSWriteThroughCache        = 0x80000000,
  1300.     kFSDoNotCache                = 0x40000000,
  1301.     kFSSequentialAccess            = 0x20000000,
  1302.     kFSStreamIOOptionsReservedMask = 0x1FFFFFFF                    /*  ~(kFSDefaultIOOptions | kFSWriteThroughCache | kFSDoNotCache | kFSSequentialAccess)*/
  1303. };
  1304.  
  1305. typedef OptionBits FSStreamIOOptions;
  1306. typedef FSStreamIOOptions *FSStreamIOOptionsPtr;
  1307. /* */
  1308. typedef ObjectID FSStreamObjID;
  1309. /**/
  1310.  
  1311. enum {
  1312.     kFSRangeLockNullOptions        = 0x00000000,
  1313.     kFSRangeLockExclusive        = 0x00000001,                    /* Allow exclusive read/write to range (else shared read-only)*/
  1314.     kFSRangeLockAllowPartial    = 0x00000002,                    /* Lock until next conflicting lock (else don't lock anything)*/
  1315.     kFSRangeLockMaximalLength    = 0x00000004                    /* Lock extends to largest possible (positive) offset*/
  1316. };
  1317.  
  1318. typedef OptionBits FSRangeLockOptions;
  1319. /**/
  1320.  
  1321. enum {
  1322.     kFSMarkPinToEOF                = 0x00000001                    /* if set, and the new mark would exceed the EOF, then set the mark to the EOF*/
  1323. };
  1324.  
  1325. typedef OptionBits FSStreamSetMarkOptions;
  1326. /*
  1327. ============================================================================
  1328.     Memory-Mapped Access Method
  1329. ============================================================================
  1330. */
  1331. /* */
  1332. typedef BackingObjectID FSBackingStoreObjID;
  1333. /*
  1334. ****************************************************************************
  1335.     NAVIGATION & ENUMERATION
  1336. ****************************************************************************
  1337. */
  1338. /**/
  1339.  
  1340. enum {
  1341.     kFSInvalidObjectIteratorCreationOptions = 0,
  1342.     kFSIncludetheUniverse        = 0x00000001,
  1343.     kFSIncludetheBootVolumeSet    = 0x00000002,
  1344.     kFSIncludeVolumes            = 0x00000004,
  1345.     kFSIncludeFolders            = 0x00000008,
  1346.     kFSIncludeFiles                = 0x00000010,
  1347.     kFSTraverseEmbeddedContainers = 0x01000000
  1348. };
  1349.  
  1350. typedef OptionBits FSObjectIteratorCreationOptions;
  1351. /**/
  1352.  
  1353. enum {
  1354.     kFSInvalidObjectIteratorMovement = 0,
  1355.     kFSObjectEnter                = 1,
  1356.     kFSObjectExit                = 2
  1357. };
  1358.  
  1359. typedef UInt32 FSObjectIteratorMovement;
  1360. /*
  1361. ============================================================================
  1362.     Object Iteration
  1363. ============================================================================
  1364. */
  1365. /**/
  1366. typedef ObjectID FSObjectIteratorObjID;
  1367. /*
  1368.   These are the public (returned by FSObjectIteratorGetInformation) iterator states.
  1369.   Other private state flags are defined in FileManagerPriv.i.
  1370. */
  1371.  
  1372. enum {
  1373.     kFSInvalidIteratorState        = 0x0000,                        /* End of Iteration state*/
  1374.     kFSIteratorEOI                = 0x0001,                        /* End of Iteration state*/
  1375.     kFSIteratorSOI                = 0x0002                        /* Start of Iteration state*/
  1376. };
  1377.  
  1378. typedef UInt32 FSObjectIteratorState;
  1379. /*
  1380. ============================================================================
  1381.     Object Resolution
  1382. ============================================================================
  1383. */
  1384. /**/
  1385.  
  1386. enum {
  1387.     kFSObjectPathwayInvalidTag    = 0x00000000,
  1388.     kFSObjectPathwayIteratorMovementElement = 0x00000001,
  1389.     kFSObjectPathwayPropertyElement = 0x00000002
  1390. };
  1391.  
  1392. typedef UInt32 FSObjectPathwayTag;
  1393. /**/
  1394. struct FSObjectPathwayElement {
  1395.     FSObjectPathwayTag                 tag;
  1396.     union {
  1397.         FSObjectIteratorMovement         movement;
  1398.         FSPropertyDescriptor             property;
  1399.     }                                 element;
  1400. };
  1401. typedef struct FSObjectPathwayElement FSObjectPathwayElement;
  1402.  
  1403. typedef FSObjectPathwayElement *FSObjectPathwayElementPtr;
  1404. /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> F a c i l i t i e s <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
  1405. /*
  1406. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1407.     Status Codes
  1408. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1409. */
  1410.  
  1411. enum {
  1412.     FSFilesAPIErrorBias            = 0xF4000000,                    /* the upper short which identifies a file system error*/
  1413.     FSErrorBias                    = 0xF5000000,                    /* the upper short which identifies a file system error*/
  1414.     FSErrorBiasMask                = 0xFF000000,                    /* how to discriminate non-FileManager errors*/
  1415.     FSAgentErrorBias            = 0xF6000000                    /* the upper short which identifies an agent error*/
  1416. };
  1417.  
  1418.  
  1419. enum {
  1420.     FSFilesAPIErrorMask            = FSFilesAPIErrorBias | 0xFFFF,    /* how to convert from old error codes to new ones*/
  1421.     FSErrorMask                    = FSErrorBias | 0xFFFF,            /* how to convert from old error codes to new ones*/
  1422.     FSAgentErrorBiasMask        = FSAgentErrorBias | 0xFFFF        /* how to discriminate non-agent errors*/
  1423. };
  1424.  
  1425. /*
  1426.  MacOS aliased Exceptions
  1427. ••restore  this from <30>
  1428. */
  1429.  
  1430. enum {
  1431.     E_NoErr                        = (noErr & FSErrorMask),
  1432.     E_NoError                    = E_NoErr,                        /* alias for noErr*/
  1433.     E_ParamErr                    = (paramErr & FSErrorMask),        /* alias for paramErr in Errors.h*/
  1434.     E_FolderFulErr                = (dirFulErr & FSErrorMask),    /* Folder full*/
  1435.     E_DirFulErr                    = E_FolderFulErr,                /* Directory full*/
  1436.     E_DskFulErr                    = (dskFulErr & FSErrorMask),    /* disk full*/
  1437.     E_DiskFull                    = E_DskFulErr,
  1438.     E_NSVErr                    = (nsvErr & FSErrorMask),        /* no such volume*/
  1439.     E_VolumeNotFound            = E_NSVErr,
  1440.     E_IOErr                        = (ioErr & FSErrorMask),        /* I/O Err*/
  1441.     E_BdNamErr                    = (bdNamErr & FSErrorMask),        /* there may be no bad names in the final system!*/
  1442.     E_BadName                    = E_BdNamErr,
  1443.     E_FnOpnErr                    = (fnOpnErr & FSErrorMask),        /* File not open*/
  1444.     E_FileNotOpen                = E_FnOpnErr,
  1445.     E_EofErr                    = (eofErr & FSErrorMask),        /* End of file*/
  1446.     E_EndOfFileErr                = E_EofErr,
  1447.     E_PosErr                    = (posErr & FSErrorMask),        /* tried to position to before start of file (r/w)*/
  1448.     E_PosOutOfRange                = E_PosErr,                        /* position is invalid (before start of file, or out of range for filesystem)*/
  1449.     E_MFulErr                    = (mFulErr & FSErrorMask),        /* memory full (open) or file won't fit (load)*/
  1450.     E_MemFullErr                = E_MFulErr,
  1451.     E_TMFOErr                    = (tmfoErr & FSErrorMask),        /* too many files open*/
  1452.     E_FnfErr                    = (fnfErr & FSErrorMask),        /* File not found*/
  1453.     E_FileNotFound                = E_FnfErr,
  1454.     E_WPrErr                    = (wPrErr & FSErrorMask),        /* diskette is write protected.*/
  1455.     E_WriteProtected            = E_WPrErr,
  1456.     E_FLckdErr                    = (fLckdErr & FSErrorMask),        /* file is locked*/
  1457.     E_FileLocked                = E_FLckdErr,
  1458.     E_VLckdErr                    = (vLckdErr & FSErrorMask),        /* volume is locked*/
  1459.     E_VolumeLocked                = E_VLckdErr,
  1460.     E_FBsyErr                    = (fBsyErr & FSErrorMask),        /* File is busy (delete)*/
  1461.     E_FileInUse                    = E_FBsyErr,
  1462.     E_DupFNErr                    = (dupFNErr & FSErrorMask),        /* duplicate filename (rename)*/
  1463.     E_DuplicateName                = E_DupFNErr,
  1464.     E_OpWrErr                    = (opWrErr & FSErrorMask),        /* file already open with with write permission*/
  1465.     E_WriteAccessDenied            = E_OpWrErr,
  1466.     E_RfNumErr                    = (rfNumErr & FSErrorMask),        /* refnum Err*/
  1467.     E_BadObjectID                = E_RfNumErr,
  1468.     E_GfpErr                    = (gfpErr & FSErrorMask),        /* get file position Err*/
  1469.     E_GetFilePosition            = E_GfpErr,
  1470.     E_VolOffLinErr                = (volOffLinErr & FSErrorMask),    /* volume not on line Err*/
  1471.     E_VolumeOffline                = E_VolOffLinErr,
  1472.     E_PermErr                    = (permErr & FSErrorMask),        /* permissions Err*/
  1473.     E_PermissionViolation        = E_PermErr,
  1474.     E_VolOnLinErr                = (volOnLinErr & FSErrorMask),    /* drive volume already on-line at MountVol*/
  1475.     E_NSDrvErr                    = (nsDrvErr & FSErrorMask),        /* no such drive (tried to mount a bad drive num)*/
  1476.     E_NoMacDskErr                = (noMacDskErr & FSErrorMask),    /* not a mac diskette (sig bytes are wrong)*/
  1477.     E_ExtFSErr                    = (extFSErr & FSErrorMask),        /* volume in question belongs to an external fs*/
  1478.     E_FSRnErr                    = (fsRnErr & FSErrorMask),        /* file system internal Err*/
  1479.     E_BadMDBErr                    = (badMDBErr & FSErrorMask),    /* bad master directory block*/
  1480.     E_WrPermErr                    = (wrPermErr & FSErrorMask),    /* write permissions Err*/
  1481.     E_DirNFErr                    = (dirNFErr & FSErrorMask),        /* Directory not found*/
  1482.     E_FolderNotFound            = E_DirNFErr,
  1483.     E_DirectoryNotFound            = E_FolderNotFound,
  1484.     E_TMWDOErr                    = (tmwdoErr & FSErrorMask),        /* No free WDCB available*/
  1485.     E_BadMovErr                    = (badMovErr & FSErrorMask),    /* Move into offspring Err*/
  1486.     E_IllegalMove                = E_BadMovErr,
  1487.     E_WrgVolTypErr                = (wrgVolTypErr & FSErrorMask),    /* Wrong volume type Err*/
  1488.     E_VolGoneErr                = (volGoneErr & FSErrorMask),    /* Server volume has been disconnected.*/
  1489.     E_FIDNotFound                = (fidNotFound & FSErrorMask),    /* no file thread exists.*/
  1490.     E_FIDExists                    = (fidExists & FSErrorMask),    /* file id already exists*/
  1491.     E_NotAFileErr                = (notAFileErr & FSErrorMask),    /* non-file object specified*/
  1492.     E_DiffVolErr                = (diffVolErr & FSErrorMask),    /* files on different volumes*/
  1493.     E_CatChangedErr                = (catChangedErr & FSErrorMask), /* the catalog has been modified*/
  1494.     E_DesktopDamagedErr            = (desktopDamagedErr & FSErrorMask), /* desktop database files are corrupted*/
  1495.     E_SameFileErr                = (sameFileErr & FSErrorMask),    /* can't exchange a file with itself*/
  1496.     E_BadFidErr                    = (badFidErr & FSErrorMask),    /* file id is dangling or doesn't match with the file number*/
  1497.     E_AfpItemNotFound            = (afpItemNotFound & FSErrorMask), /* information not found*/
  1498.     E_AfpIconTypeError            = (afpIconTypeError & FSErrorMask) /* sizes of new icon and one it replaces don't match*/
  1499. };
  1500.  
  1501. /* General Exceptions that could be shared by different modules*/
  1502.  
  1503. enum {
  1504.     E_MissingParameter            = FSErrorBias | 0x0001,            /* one or more mandatory parameters missing*/
  1505.     E_InvalidMsg                = FSErrorBias | 0x0002,            /* invalid message*/
  1506.                                                                 /*    reserved                        = FSErrorBias | 0x0003,*/
  1507.     E_InvalidForkType            = FSErrorBias | 0x0004,            /* ForkType not recognized or not supported*/
  1508.     E_ForkInUse                    = FSErrorBias | 0x0005,            /* fork is currently in use*/
  1509.     E_PropertyNotFound            = FSErrorBias | 0x0006,            /* Requested Property is not found*/
  1510.     E_ObjectNotFound            = FSErrorBias | 0x0007,            /* Requested Object is not found*/
  1511.     E_MemoryFull                = E_MemFullErr,                    /* PoolAllocate returned nil*/
  1512.     E_NotAFileOrFolder            = FSErrorBias | 0x0008,            /* Given object is not a file or a Folder*/
  1513.     E_TooManyParameters            = FSErrorBias | 0x0009,            /* one or another parameter, but not both*/
  1514.     E_PatternNotFound            = FSErrorBias | 0x000A,            /* Couldn't find pattern in buffer*/
  1515.     E_BufferLength                = FSErrorBias | 0x000B,            /* Illegal buffer size*/
  1516.     E_InvalidDirectoryNum        = FSErrorBias | 0x000C,            /* Invalid Directory Number*/
  1517.     E_IllegalFileOperation        = FSErrorBias | 0x000D,
  1518.     E_IllegalFolderOperation    = FSErrorBias | 0x000E,
  1519.     E_IllegalVolumeOperation    = FSErrorBias | 0x000F,
  1520.     E_InvalidRelationship        = FSErrorBias | 0x0010,            /* FSRelationship is invalid in the context of the operation*/
  1521.     E_UnknownRelationship        = FSErrorBias | 0x0011,            /* FSRelationship is undefined*/
  1522.     E_DoesNotMatch                = FSErrorBias | 0x0012
  1523. };
  1524.  
  1525. /* FSAgent Interface Exceptions*/
  1526.  
  1527. enum {
  1528.     E_NoGetBlockProc            = FSErrorBias | 0x0101,
  1529.     E_NoReleaseBlockProc        = FSErrorBias | 0x0102,
  1530.     E_NoSetEndOfForkProc        = FSErrorBias | 0x0103,
  1531.     E_NoSetBlockSizeProc        = FSErrorBias | 0x0104,
  1532.     E_NoReadBlockProc            = FSErrorBias | 0x0105,
  1533.     E_NoWriteBlockProc            = FSErrorBias | 0x0106,
  1534.     E_NoForkMapBlockProc        = FSErrorBias | 0x0107,
  1535.     E_NoReadRangeProc            = FSErrorBias | 0x0108,
  1536.     E_NoWriteRangeProc            = FSErrorBias | 0x0109
  1537. };
  1538.  
  1539. /* BTree Module Exceptions*/
  1540.  
  1541. enum {
  1542.     E_AccessMethodStart            = FSErrorBias | 0x0200,            /* BTree Module Errors*/
  1543.     E_BadHeader                    = FSErrorBias | 0x0300,
  1544.     E_BadRotate                    = FSErrorBias | 0x0301,
  1545.     E_NotOpenAsBTree            = FSErrorBias | 0x0302,            /* no BTreeCB has been allocated for fork*/
  1546.     E_AlreadyOpenAsBTree        = FSErrorBias | 0x0303,
  1547.     E_NoBTreeIterator            = FSErrorBias | 0x0308,
  1548.     E_BTreeIsEmpty                = FSErrorBias | 0x030A,
  1549.     E_NoMoreMapNodes            = FSErrorBias | 0x030B,
  1550.     E_BadNodeSize                = FSErrorBias | 0x030C,
  1551.     E_BadNodeType                = FSErrorBias | 0x030D,
  1552.     E_BadMaxKeyLength            = FSErrorBias | 0x030E,
  1553.     E_BadKeyDescriptor            = FSErrorBias | 0x030F,
  1554.     E_MinimumKeyTooLong            = FSErrorBias | 0x0310,
  1555.     E_RecordWontFit                = FSErrorBias | 0x0311,            /* Existing BTree Errors*/
  1556.     E_BeforeBeginingOfFile        = FSErrorBias | 0x0353,
  1557.     E_PastEndOfFile                = FSErrorBias | 0x0354,
  1558.     E_UnknownBTreeVersion        = FSErrorBias | 0x0355,
  1559.     E_NoKeyCompareProc            = FSErrorBias | 0x0356,
  1560.     E_TreeTooDeep                = FSErrorBias | 0x0357,
  1561.     E_NoKeyDescriptor            = FSErrorBias | 0x0358,
  1562.     E_Reserved                    = FSErrorBias | 0x0359,
  1563.     E_BadUserID                    = FSErrorBias | 0x035A,
  1564.     E_UnknownKeyDescType        = FSErrorBias | 0x035B,
  1565.     E_BadKeyDescLength            = FSErrorBias | 0x035C,
  1566.     E_PlaceMarkerInvalid        = FSErrorBias | 0x035D,
  1567.     E_BadKeyField                = FSErrorBias | 0x035E,
  1568.     E_BadKeyAttribute            = FSErrorBias | 0x035F,
  1569.     E_BadKeyLength                = FSErrorBias | 0x0360,
  1570.     E_RecordNotFound            = FSErrorBias | 0x0361,
  1571.     E_RecordExists                = FSErrorBias | 0x0362,
  1572.     E_NoSpaceLeft                = FSErrorBias | 0x0363,
  1573.     E_RecordTooBig                = FSErrorBias | 0x0364,
  1574.     E_BadNode                    = FSErrorBias | 0x0365,
  1575.     E_NotABTree                    = FSErrorBias | 0x0366,
  1576.     E_LastBTreeError            = FSErrorBias | 0x03FF
  1577. };
  1578.  
  1579. /* Cache Module Exceptions*/
  1580.  
  1581. enum {
  1582.     E_NonExist                    = FSErrorBias | 0x0400,            /* cache block does not exist*/
  1583.     E_BufferInUse                = FSErrorBias | 0x0401,            /* cache buffer is in use*/
  1584.     E_MissingCacheCB            = FSErrorBias | 0x0402,            /* cache control block is missing from Fork/Vol CB*/
  1585.     E_CorruptCacheCB            = FSErrorBias | 0x0403,            /* cache control block associated with Fork/Vol CB is corrupt*/
  1586.     E_BufferHeaderOverflow        = FSErrorBias | 0x0404,            /* cache buffer header size is greater than the page size*/
  1587.     E_SGListOverflow            = FSErrorBias | 0x0405,            /* scatter gather list's address range is not big enough*/
  1588.                                                                 /* to accomodate the entire block range*/
  1589.     E_InvalidBlockSize            = FSErrorBias | 0x0406,            /* volume/fork block size is not of the kind 512,1K,2K,4K…*/
  1590.     E_NoPageToRelinquish        = FSErrorBias | 0x0407,            /* cache release Q is empty; can't relinquish a page to VM*/
  1591.     E_NoEmptyBufferHeaders        = FSErrorBias | 0x0408,            /* no more empty buffer headers left; time for creating more*/
  1592.     E_AlreadyInCache            = FSErrorBias | 0x0409,            /* all blocks asked for are already in cache*/
  1593.     E_NoPagesToClean            = FSErrorBias | 0x040A            /* no more pages to clean by page cleaner*/
  1594. };
  1595.  
  1596. /* Control Blocks Module Exceptions*/
  1597.  
  1598. enum {
  1599.     E_NoCBPtr                    = FSErrorBias | 0x0501,            /* CBPtr is nil*/
  1600.     E_NoSuchPath                = FSErrorBias | 0x0502,
  1601.     E_NoSuchFork                = FSErrorBias | 0x0503,
  1602.     E_NoSuchFile                = FSErrorBias | 0x0504,
  1603.     E_NoSuchVolume                = FSErrorBias | 0x0505,
  1604.     E_NoSuchFSAgent                = FSErrorBias | 0x0506,
  1605.     E_InvalidCBType                = FSErrorBias | 0x0507,
  1606.     E_InvalidCBPtr                = FSErrorBias | 0x0508,
  1607.     E_InvalidParent                = FSErrorBias | 0x0509,
  1608.     E_NoFSAgents                = FSErrorBias | 0x050A,
  1609.     E_NoQHeadPtr                = FSErrorBias | 0x050B,
  1610.     E_ChildStillQueued            = FSErrorBias | 0x050C,
  1611.     E_LastCBError                = FSErrorBias | 0x05FF            /* Last error for Control Blocks Module*/
  1612. };
  1613.  
  1614. /* FSObjectRef Exceptions*/
  1615.  
  1616. enum {
  1617.     E_UndefinedObjectRef        = FSErrorBias | 0x0601,
  1618.     E_ObjectRefAlreadyInitialized = FSErrorBias | 0x0602,
  1619.     E_ObjectRefAlreadyExists    = FSErrorBias | 0x0603,
  1620.     E_InvalidObjectRef            = FSErrorBias | 0x0604            /* kFStheNullObjectRef was passed*/
  1621. };
  1622.  
  1623. /* Range Lock Module Exceptions*/
  1624.  
  1625. enum {
  1626.     E_RangeNotLocked            = FSErrorBias | 0x0701,            /* Tried to unlock a range that wasn't locked*/
  1627.     E_NoAsyncLock                = FSErrorBias | 0x0702,            /* Tried to cancel an async lock, not pending*/
  1628.     E_LockedByOther                = FSErrorBias | 0x0703,            /* Conflicting lock owned by different path*/
  1629.     E_LockedBySelf                = FSErrorBias | 0x0704,            /* Conflicting lock owned by same path*/
  1630.     E_LockedForRead                = FSErrorBias | 0x0705            /* Conflicting read lock (owner unknown)*/
  1631. };
  1632.  
  1633. /* Utilities Module Exceptions*/
  1634.  
  1635. enum {
  1636.     E_UtilitiesStart            = FSErrorBias | 0x0800
  1637. };
  1638.  
  1639. /* Volume Exceptions*/
  1640.  
  1641. enum {
  1642.     E_MajorOfflineChange        = FSErrorBias | 0x0901,
  1643.     E_MinorOfflineChange        = FSErrorBias | 0x0902,
  1644.     E_VolumeInUse                = FSErrorBias | 0x0903
  1645. };
  1646.  
  1647. /* FSIterator Exceptions*/
  1648.  
  1649. enum {
  1650.     E_InvalidIterationObjectType = FSErrorBias | 0x0A01,        /* can't enter a file object*/
  1651.     E_ExitIteratorScope            = FSErrorBias | 0x0A02,            /* iterator exited the scope*/
  1652.     E_IteratorScopeException    = FSErrorBias | 0x0A03,            /* iterator is undefined due to error or movement of scope locality*/
  1653.     E_UnknownIterationMovement    = FSErrorBias | 0x0A04,            /* iterator movement is not defined*/
  1654.     E_InvalidIterationMovement    = FSErrorBias | 0x0A05,            /* iterator movement is invalid in current context*/
  1655.     E_IteratorOwnership            = FSErrorBias | 0x0A06,            /* wrong client process ID*/
  1656.     E_EndOfIteration            = FSErrorBias | 0x0A07            /* there were no objects left to return on iteration*/
  1657. };
  1658.  
  1659. /* FSProperty Exceptions*/
  1660.  
  1661. enum {
  1662.     E_PropDescrOffsetRangeErr    = FSErrorBias | 0x0B01,            /* Property descriptor list has offset out of range*/
  1663.     E_PropDescrOverrunLengthErr    = FSErrorBias | 0x0B02,            /* PropOverrun bit map is too short*/
  1664.                                                                 /*    reserved                            = FSErrorBias | 0x0B03,*/
  1665.     E_PropDescrNotFoundLengthErr = FSErrorBias | 0x0B04,        /* PropNotFound bit map is too short*/
  1666.     E_PropDescrReadOnlyFailLengthErr = FSErrorBias | 0x0B05,    /* PropDescrReadOnlyFail bit map is too short*/
  1667.     E_PropBufferShort            = FSErrorBias | 0x0B06,            /* Buffer too short for Properties.*/
  1668.     E_PropertyBufferFieldTooSmall = FSErrorBias | 0x0B07,        /* From pt of view of supplied buffer field*/
  1669.     E_PropertyException            = FSErrorBias | 0x0B08,            /* */
  1670.                                                                 /* PropertiesGet: field is not adaquate to hold Property, field is truncated.  (Overrun)*/
  1671.     E_PropertyBufferFieldTooLarge = FSErrorBias | 0x0B09,        /* From pt of view of supplied buffer field*/
  1672.                                                                 /*    PropertiesGet: field is larger than needed to hold Properties. (Underflow)*/
  1673.     E_CanNotFindDesktopDatabase    = FSErrorBias | 0x0B0A,            /* either desktopDB or desktopDF not found*/
  1674.     E_CanNotFindPDSFile            = FSErrorBias | 0x0B0B,            /* cannot find PDS*/
  1675.     E_CanNotFindEDSFile            = FSErrorBias | 0x0B0C,            /* cannot find EDS*/
  1676.     E_PropertyAlreadyExists        = FSErrorBias | 0x0B0D,            /* Property already exists in desktop database*/
  1677.     E_PropertyTypeError            = FSErrorBias | 0x0B0E,            /* error getting/setting Property in desktop database*/
  1678.     E_PropertyError                = FSErrorBias | 0x0B0F,            /* error getting/setting Property in desktop database*/
  1679.     E_PropertyReadOnly            = FSErrorBias | 0x0B10            /* attempt to set read-only property*/
  1680. };
  1681.  
  1682. /* FSDispatch Errors*/
  1683.  
  1684. enum {
  1685.     E_UnknownRequest            = FSErrorBias | 0x1001,            /* Request Command ID not defined*/
  1686.     E_VolRecognized                = E_NoError,                    /* Agent was able to recognize the Volume*/
  1687.     E_VolNotRecognized            = FSErrorBias | 0x1002,            /* Agent was NOT able to recognize the Volume*/
  1688.     E_CanInitialize                = E_NoError,                    /* Agent is able to initialize Volume*/
  1689.     E_CanNotInitialize            = FSErrorBias | 0x1003,            /* Agent is NOT able to initialize Volume*/
  1690.     E_NotAPath                    = FSErrorBias | 0x1004,            /* ID used was not for a Path*/
  1691.     E_NotAFork                    = FSErrorBias | 0x1005,            /* ID used was not for a Fork*/
  1692.     E_NotAFile                    = FSErrorBias | 0x1006,            /* ID used was not for a File*/
  1693.     E_NotAVolume                = FSErrorBias | 0x1007,            /* ID used was not for a Volume*/
  1694.     E_NotAnAgent                = FSErrorBias | 0x1008,            /* ID used was not for an Agent*/
  1695.     E_NotAnObjectIterator        = FSErrorBias | 0x1009,            /* ID used was not for an Object Iterator*/
  1696.     E_NotAPropertyIterator        = FSErrorBias | 0x100A,            /* ID used was not for a Property Iterator*/
  1697.     E_AgentIncomplete            = FSErrorBias | 0x100B,            /* Agent did not finish instalation protocol*/
  1698.     E_QueueOverflow                = FSErrorBias | 0x100C,            /* A Notification Queue has overflowed the user's size*/
  1699.     E_QueueEmpty                = FSErrorBias | 0x100D,            /* The Notification Queue is Empty*/
  1700.                                                                 /* the message length is either larger than the size from the messaging services, or is smaller than implied by the variable data needs*/
  1701.     E_MessageLength                = FSErrorBias | 0x100E,
  1702.     E_NoVolumeSpecified            = FSErrorBias | 0x100F,            /* No Volume was specified for PathnameResolve*/
  1703.                                                                 /* Dispatch or Request Processing Task*/
  1704.     E_MessageMustBeAtomic        = FSErrorBias | 0x1010,
  1705.     E_MessageMustNotBeAtomic    = FSErrorBias | 0x1011,
  1706.     E_MessageSentToWrongObject    = FSErrorBias | 0x1012,
  1707.     E_InvalidVolumeSet            = FSErrorBias | 0x1013,            /* VolumeSetGetInformation: volumeSet is not recognized*/
  1708.     E_FSShutdown                = FSErrorBias | 0x10F1            /* terminated because system was shutting down*/
  1709. };
  1710.  
  1711. /* General File Manager Errors*/
  1712.  
  1713. enum {
  1714.     E_Unimplemented                = FSErrorBias | 0xFFFF            /* Feature unimplemented*/
  1715. };
  1716.  
  1717. /*
  1718. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1719.     SNS SERVICES: FILE SYSTEMS EVENTS
  1720. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1721. */
  1722. /*
  1723. ============================================================================
  1724.     SNSKind                                    SNSSubject                    Info
  1725.     --------------------------------------    --------------------------    -----------------------
  1726.     kFSEventObjectChangedKind                FSEventObjectSubject        NULL
  1727.     kFSEventVolumeStateChangedKind            FSEventVolumeSubject        NULL
  1728.     kFSEventVolumeObjectsChangedKind        FSEventVolumeSubject        FSEventPersistentInfo/FSEventDeleteInfo
  1729.     kFSEventPropertyChangedForObjectsKind    FSEventPropertySubject        FSEventPersistentInfo
  1730.     kFSEventObjectPropertiesChangedKind        FSEventObjectSubject        FSEventPropertyInfo
  1731.     kFSEventObjectsinFolderChangedKind        FSEventObjectSubject        FSEventPersistentInfo/FSEventDeleteInfo
  1732.     
  1733. Note: FSEventPersistentInfo/FSEventDeleteInfo means that for create we use FSEventPersistentInfo
  1734. because no body has access to the the run time ID of a new object.  For delete we use 
  1735. FSEventDeleteInfo because nothing can be done with PersistentInfo of a deleted objects,
  1736. but those with run time ID may wish to match them.
  1737. ============================================================================
  1738. */
  1739. /*
  1740.     The FSEventOperation type is used in the interface whenever an event needs
  1741.     to report the manner in which something changed: was it created, deleted,
  1742.     or just modified. The FSEventOperation’s are enumerated values for which
  1743.     the following constants are currently defined:
  1744. */
  1745.  
  1746. enum {
  1747.     kFSInvalidEvent                = 0,
  1748.     kFSEventAny                    = 1,
  1749.     kFSEventCreation            = 2,
  1750.     kFSEventMounting            = kFSEventCreation,
  1751.     kFSEventComingOnline        = kFSEventCreation,
  1752.     kFSEventDeletion            = 3,
  1753.     kFSEventUnmounting            = kFSEventDeletion,
  1754.     kFSEventGoingOffline        = kFSEventDeletion,
  1755.     kFSEventModification        = 4
  1756. };
  1757.  
  1758. typedef UInt32 FSEventOperation;
  1759. /*
  1760.     FSEventSNSKind:  SNSKind for File System events
  1761. */
  1762.  
  1763. enum {
  1764.     kFSEventObjectChangedKind    = 'fsoc',                        /*  0x66736f63  */
  1765.     kFSEventVolumeStateChangedKind = 'fsvc',                    /*  0x66737663  */
  1766.     kFSEventPropertyChangedForObjectsKind = 'fspo',                /*  0x6673706f  */
  1767.     kFSEventObjectPropertiesChangedKind = 'fsop',                /*  0x66736f70  */
  1768.     kFSEventObjectsinFolderChangedKind = 'fsfo',
  1769.     kFSEventVolumeObjectsChangedKind = 'fsvo'
  1770. };
  1771.  
  1772. /*
  1773.     FSEventSNSService:  SNSService for File System events
  1774. */
  1775.  
  1776. enum {
  1777.     kFSEventNotificationService    = 'fsys'
  1778. };
  1779.  
  1780. /**/
  1781. struct FSEventObjectInfo {
  1782.     ItemCount                         count;
  1783.     FSObjectRef                     objects[1];
  1784. };
  1785. typedef struct FSEventObjectInfo FSEventObjectInfo;
  1786.  
  1787. typedef FSEventObjectInfo *FSEventObjectInfoPtr;
  1788. /**/
  1789. struct FSEventPersistentInfo {
  1790.     ItemCount                         count;
  1791.     FSObjectPersistentReference     objects[1];
  1792. };
  1793. typedef struct FSEventPersistentInfo FSEventPersistentInfo;
  1794.  
  1795. typedef FSEventPersistentInfo *FSEventPersistentInfoPtr;
  1796. struct FSEventDeleteInfo {
  1797.     FSObjectRef                     object;
  1798.     FSDate                             date;
  1799.     TextObjectUnit                     name[1];
  1800. };
  1801. typedef struct FSEventDeleteInfo FSEventDeleteInfo;
  1802.  
  1803. typedef FSEventDeleteInfo *FSEventDeleteInfoPtr;
  1804. /**/
  1805. struct FSEventObjectPropertyInfo {
  1806.     ItemCount                         count;
  1807.     FSProperty                         properties[1];
  1808. };
  1809. typedef struct FSEventObjectPropertyInfo FSEventObjectPropertyInfo;
  1810.  
  1811. typedef FSEventObjectPropertyInfo FSEventObjectPropertyInfoPtr;
  1812. /**/
  1813. struct FSEventObjectSubject {
  1814.     FSEventOperation                 operation;
  1815.     FSObjectRef                     object;
  1816. };
  1817. typedef struct FSEventObjectSubject FSEventObjectSubject;
  1818.  
  1819. typedef FSEventObjectSubject FSEventObjectSubjectPtr;
  1820. struct FSEventVolumeSubject {
  1821.     FSEventOperation                 operation;
  1822.     FSVolumeObjID                     volume;
  1823. };
  1824. typedef struct FSEventVolumeSubject FSEventVolumeSubject;
  1825.  
  1826. typedef FSEventVolumeSubject FSEventVolumeSubjectPtr;
  1827. /**/
  1828. struct FSEventObjectPropertySubject {
  1829.     FSEventOperation                 operation;
  1830.     FSProperty                         property;
  1831. };
  1832. typedef struct FSEventObjectPropertySubject FSEventObjectPropertySubject;
  1833.  
  1834. typedef FSEventObjectPropertySubject FSEventObjectPropertySubjectPtr;
  1835. /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> U N I O N S <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
  1836. /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C O M P A B I L I T Y <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
  1837. #define kFSUniverseCreatorListProperty                    kFSUniverseCreatorListPropertyValue
  1838. #define kFSUniverseVolumeSetListProperty                kFSUniverseVolumeSetListPropertyValue
  1839. #define kFSUniverseBootVolumeProperty                    kFSUniverseBootVolumePropertyValue
  1840. #define kFSBootVolumeSetVolumeListProperty                kFSBootVolumeSetVolumeListPropertyValue
  1841. #define kFSFileManagerForkPropertyValueProperty            kFSFileManagerForkPropertyValuePropertyValue
  1842. #define kFSFileManagerForkPropertyListProperty            kFSFileManagerForkPropertyListPropertyValue
  1843. #define kFSFileManagerSimplePropertyListProperty        kFSFileManagerSimplePropertyListPropertyValue
  1844. #define kFSFileManagerPropertyListProperty                kFSFileManagerPropertyListPropertyValue
  1845. #define kFSFileManagerPropertyDescriptorListProperty    kFSFileManagerPropertyDescriptorListPropertyValue
  1846. /**/
  1847. #define kFSFileManagerObjectContainerObjectRefProperty        kFSFileManagerObjectContainerObjectRefPropertyValue
  1848. #define kFSFileManagerObjectContainerObjectTypeProperty        kFSFileManagerObjectContainerObjectTypePropertyValue
  1849. #define kFSFileManagerObjectContainerPersistentReferenceProperty    kFSFileManagerObjectContainerPersistentReferencePropertyValue
  1850. #define kFSFileManagerObjectRefProperty                        kFSFileManagerObjectRefPropertyValue
  1851. #define kFSFileManagerObjectPersistentReferenceProperty        kFSFileManagerObjectPersistentReferencePropertyValue
  1852. #define kFSFileManagerObjectTypeProperty                    kFSFileManagerObjectTypePropertyValue
  1853. #define kFSFileManagerObjectNameProperty                    kFSFileManagerObjectNamePropertyValue
  1854. #define kFSFileManagerObjectCreationDateProperty            kFSFileManagerObjectCreationDatePropertyValue
  1855. #define kFSFileManagerObjectModificationDateProperty        kFSFileManagerObjectModificationDatePropertyValue
  1856. #define kFSFileManagerObjectBackupDateProperty                kFSFileManagerObjectBackupDatePropertyValue
  1857. #define kFSFileManagerObjectAccessDateProperty                kFSFileManagerObjectAccessDatePropertyValue
  1858. /**/
  1859. #define kFSFileManagerObjectCumulativeModificationDateProperty    kFSFileManagerObjectCumulativeModificationDatePropertyValue
  1860. #define kFSFileManagerObjectCumulativeBackupDateProperty        kFSFileManagerObjectCumulativeBackupDatePropertyValue
  1861. #define kFSFileManagerObjectCumulativeAccessDateProperty        kFSFileManagerObjectCumulativeAccessDatePropertyValue
  1862. /**/
  1863. #define kFSFileManagerVolumeFormatProperty                    kFSFileManagerVolumeFormatPropertyValue
  1864. #define kFSFileManagerVolumeCapabilityProperty                kFSFileManagerVolumeCapabilityPropertyValue
  1865. #define kFSFileManagerVolumeBlockCountProperty                kFSFileManagerVolumeBlockCountPropertyValue
  1866. #define kFSFileManagerVolumeBlockFreeCountProperty            kFSFileManagerVolumeBlockFreeCountPropertyValue
  1867. #define kFSFileManagerVolumeBlockSizeProperty                kFSFileManagerVolumeBlockSizePropertyValue
  1868. #define kFSFileManagerVolumeFreeSizeProperty                kFSFileManagerVolumeFreeSizePropertyValue
  1869. #define kFSFileManagerVolumeIOQuantaProperty                kFSFileManagerVolumeIOQuantaPropertyValue
  1870. /**/
  1871. #define kFSFileManagerFileCountProperty                        kFSFileManagerFileCountPropertyValue
  1872. #define kFSFileManagerFolderCountProperty                    kFSFileManagerFolderCountPropertyValue
  1873. #define kFSFileManagerObjectCountProperty                    kFSFileManagerObjectCountPropertyValue
  1874. #define kFSUserExperienceFinderBasicInfoProperty            kFSUserExperienceFinderBasicInfoPropertyValue
  1875. #define kFSUserExperienceFinderExtendedInfoProperty            kFSUserExperienceFinderExtendedInfoPropertyValue
  1876. #define kFSUserExperienceDocumentTypeProperty                kFSUserExperienceDocumentTypePropertyValue
  1877. #define kFSUserExperienceDocumentCreatorProperty            kFSUserExperienceDocumentCreatorPropertyValue
  1878. #define kFSUserExperienceCommentProperty                    kFSUserExperienceCommentPropertyValue
  1879. #define kFSUserExperienceApplicationProperty                kFSUserExperienceApplicationPropertyValue
  1880. #define kFSUserExperienceApplicationListProperty            kFSUserExperienceApplicationListPropertyValue
  1881. #define kFSUserExperienceLargeIconProperty                    kFSUserExperienceLargeIconPropertyValue
  1882. #define kFSUserExperienceLarge4BitIconProperty                kFSUserExperienceLarge4BitIconPropertyValue
  1883. #define kFSUserExperienceLarge8BitIconProperty                kFSUserExperienceLarge8BitIconPropertyValue
  1884. #define kFSUserExperienceSmallIconProperty                    kFSUserExperienceSmallIconPropertyValue
  1885. #define kFSUserExperienceSmall4BitIconProperty                kFSUserExperienceSmall4BitIconPropertyValue
  1886. #define kFSUserExperienceSmall8BitIconProperty                kFSUserExperienceSmall8BitIconPropertyValue
  1887. #endif
  1888.  
  1889. #pragma options align=reset
  1890. #endif /* PRAGMA_ALIGN_SUPPORTED */
  1891.  
  1892. #if PRAGMA_IMPORT_SUPPORTED
  1893. #pragma import off
  1894. #endif
  1895.  
  1896. #ifdef __cplusplus
  1897. }
  1898. #endif
  1899.  
  1900. #endif /* __FILEMANAGERTYPES__ */
  1901.  
  1902.